当前位置: 首页 > news >正文

网站的三大标签创业项目网站建设规划

网站的三大标签,创业项目网站建设规划,何炅做的网站广告,wordpress ip无法访问文章目录 一、内联函数1.1概念1.2特性 二、auto关键字2.2类型别名思考2.3auto简介2.4auto使用细则2.4 auto不能推导的场景 三、基于范围的for循环(C11)3.1 范围for的语法 四、指针空值nullptr(C11)4.1 C98中的指针空值 所属专栏:C初阶 一、内联函数 1.1概念 以inline修饰的函… 文章目录 一、内联函数1.1概念1.2特性 二、auto关键字2.2类型别名思考2.3auto简介2.4auto使用细则2.4 auto不能推导的场景 三、基于范围的for循环(C11)3.1 范围for的语法 四、指针空值nullptr(C11)4.1 C98中的指针空值 所属专栏:C初阶 一、内联函数 1.1概念 以inline修饰的函数叫做内联函数编译时C编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销提高了运行效率 如果在上面Add函数添加了inline关键字修饰将其改成内联函数在编译期间编译器会用函数体替换函数的调用。 查看方式 在release模式下查看编译器生成的汇编代码中是否存在call Add在debug模式下需要对编译器进行设置否则不会展开(因为debug模式下编译器默认不会对代码进行优化以下给出VS2022的设置方式 1.2特性 inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会用函数体替换函数调用缺陷可能会使目标文件变大优势少了调用开销提高程序运行效率。 比如Add函数有10行代码调用1000次那么如果是普通函数的话需要的空间就是101000如果是内联函数需要的空间就是10*1000 inline对于编译器而言只是一个建议不同编译器关于inline实现机制可能不同一般建议将函数规模较小(即函数不是很长具体没有准确的说法取决于编译器内部实现)、不是递归、频繁调用的函数采用inline修饰否则编译器会忽略inline特性。下图为《Cprime》第五版关于inline的建议 inline不建议声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址了链接就会找不到。(参考编译和链接) 【面试题】 宏的优缺点 优点 1.增强代码的复用性。 2.提高性能。(宏函数是直接展开的不需要调用建立函数栈帧提高了效率) 缺点 1.不方便调试宏。因为预编译阶段进行了替换 2.导致代码可读性差可维护性差容易误用。(宏函数的写法比较复杂不容易掌握) 3.没有类型安全的检查 。宏函数都是直接展开的不会检查 C有哪些技术能够替代宏 常量定义 换用const enum短小函数定义 换用内联函数 二、auto关键字 2.2类型别名思考 类型难于拼写含义不明确导致容易出错 #include string #include map int main() {std::mapstd::string, std::string m{ { apple, 苹果 }, { orange, 橙子 }, {pear,梨} };std::mapstd::string, std::string::iterator it m.begin();while (it ! m.end()){//....}return 0;}std::mapstd::string, std::string::iterator是一个类型但是该类型太长了特别容易写错。这里可以用到auto简化 2.3auto简介 在早期C/C中auto的含义是使用auto修饰的变量是具有自动存储器的局部变量但遗憾的是一直没有人去使用它大家可思考下为什么 C11中标准委员会赋予了auto全新的含义即auto不再是一个存储类型指示符而是作为一个新的类型指示符来指示编译器auto声明的变量必须由编译器在编译时期推导而得 int TestAuto() {return 10; } int main() {int a 10;auto b a;auto c a;auto d TestAuto();cout typeid(b).name() endl;cout typeid(c).name() endl;cout typeid(d).name() endl;//auto e; 无法通过编译使用auto定义变量时必须对其进行初始化return 0; }【注意】 使用auto定义变量时必须对其进行初始化在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明而是一个类型声明时的“占位符”编译器在编译期会将auto替换为变量实际的类型。 2.4auto使用细则 auto与指针和引用结合起来使用 用auto声明指针类型时用auto和auto*没有任何区别但用auto声明引用类型时则必须加 int main() {int x 10;auto a x;auto* b x;auto c x;cout typeid(a).name() endl;cout typeid(b).name() endl;cout typeid(c).name() endl;*a 20;*b 30;c 40;return 0; }在同一行定义多个变量 当在同一行声明多个变量时这些变量必须是相同的类型否则编译器将会报错因为编译器实际只对第一个类型进行推导然后用推导出来的类型定义其他变量 void TestAuto() {auto a 1, b 2; auto c 3, d 4.0; // 该行代码会编译失败因为c和d的初始化表达式类型不同}2.4 auto不能推导的场景 1. auto不能作为函数的参数 // 此处代码编译失败auto不能作为形参类型因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) {}2. auto不能直接用来声明数组 void TestAuto() {int a[] {1,2,3};auto b[] {456}; }3. 为了避免与C98中的auto发生混淆C11只保留了auto作为类型指示符的用法 4. auto在实际中最常见的优势用法就是跟以后会讲到的C11提供的新式for循环还有lambda表达式等进行配合使用。 三、基于范围的for循环(C11) 3.1 范围for的语法 在C98中如果要遍历一个数组可以按照以下方式进行 void TestFor() {int array[] { 1, 2, 3, 4, 5 };for (int i 0; i sizeof(array) / sizeof(array[0]); i)array[i] * 2;for (int* p array; p array sizeof(array)/ sizeof(array[0]); p)cout *p endl; }对于一个有范围的集合而言由程序员来说明循环的范围是多余的有时候还会容易犯错误。因此C11中引入了基于范围的for循环。for循环后的括号由冒号“ ”分为两部分第一部分是范围内用于迭代的变量第二部分则表示被迭代的范围。 //语法糖 void TestFor() {int array[] { 1, 2, 3, 4, 5 };for(auto e : array)e * 2;for(auto e : array)cout e ;return 0; }自动依次取数组中的数据赋值给e对象自动判断结束 四、指针空值nullptr(C11) 4.1 C98中的指针空值 在良好的C/C编程习惯中声明一个变量时最好给该变量一个合适的初始值否则可能会出现不可预料的错误比如未初始化的指针。如果一个指针没有合法的指向我们基本都是按照如下方式对其进行初始化 void TestPtr() {int* p1 NULL;int* p2 0;// …… }NULL实际是一个宏在传统的C头文件(stddef.h)中可以看到如下代码 #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif可以看到NULL可能被定义为字面常量0或者被定义为无类型指针(void)的常量*。不论采取何种定义在使用空值的指针时都不可避免的会遇到一些麻烦比如: void f(int) {coutf(int)endl; } void f(int*) {coutf(int*)endl; } int main() {f(0);f(NULL);f((int*)NULL);return 0; }程序本意是想通过f(NULL)调用指针版本的f(int*)函数但是由于NULL被定义成0因此与程序的初衷相悖。 在C98中字面常量0既可以是一个整形数字也可以是无类型的指针(void*)常量但是编译器默认情况下将其看成是一个整形常量如果要将其按照指针方式来使用必须对其进行强转(void *)0。 注意 1. 在使用nullptr表示指针空值时不需要包含头文件因为nullptr是C11作为新关键字引入的。 2. 在C11中sizeof(nullptr) 与 sizeof((void)0)所占的字节数相同. 3. 为了提高代码的健壮性在后续表示指针空值时建议最好使用nullptr。
http://www.yingshimen.cn/news/79411/

相关文章:

  • wordpress前端上传图片网站内容优化细节
  • 许昌 网站开发网站开发分包
  • 工艺品网站设计做瞹网站
  • 专门找人做软件的网站用v9做网站优化
  • 如何把学校网站建设好汽车报价网站
  • 外国做爰网站天津网站建设交易
  • 大鹏新区住房建设局网站网站建设验收合同
  • 做俄罗斯网站怎么自己搭建小程序
  • 建设开源社区网站什么意思网络营销买什么好
  • 网站优化公司大家好上海专业的seo公司
  • 最出名的网站建设公司公司网站最下面突然有乱码
  • 好看英文网站教人做美食的网站
  • 营销型网站关键词多少为好工程建设部
  • 塔城建设局网站做软件赚钱还是做网站赚钱
  • 深圳网站设计公司排名wordpress 主题黑
  • 仿中国化妆品网站模板企业管理系统网站开发标书
  • 长沙o2o网站制作公司wordpress 付费阅读
  • 网站建设佰首选金手指七企业网站手机版模板免费下载
  • 行业门户网站设计深圳app定制开发外包公司
  • 创建qq网站吗推广赚钱小程序
  • 哪些网站是wordpressmip网站实例
  • 校园二级网站建设中山百度首页推广
  • 班组建设管理网站律所网站方案
  • 网站建设课程教学改革上海网站开发方案
  • 长沙市网站制作哪家专业wordpress建设的网站
  • 网站建设次年续费合同招工 最新招聘信息58同城
  • 成都网站设计费用wordpress 模版 婚礼
  • 帝国cms 孕婴网站模板导视设计分析
  • 做网站需要多少钱山东平台网站建设设计
  • html5网站建设做网站时候如果添加微信代码