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

南宁网站建设设计制作创意设计网站大全

南宁网站建设设计制作,创意设计网站大全,包装设计公司哪家好,小游戏网站欣赏背景#xff1a;旧标准的auto 在旧标准中#xff0c;auto代表“具有自动存储期的 局部变量” auto int i 0; //具有自动存储期的局部变量 //C98/03#xff0c;可以默认写成int i0; static int j 0; //静态类型的定义方法实际上#xff0c;我们很少使用auto#xff0c…背景旧标准的auto 在旧标准中auto代表“具有自动存储期的 局部变量” auto int i 0; //具有自动存储期的局部变量 //C98/03可以默认写成int i0; static int j 0; //静态类型的定义方法实际上我们很少使用auto因为非static即“具有自动存储期的”所以不用人为去写auto 因此在C11中auto关键字不再表示存储类型指示符如static、register、mutable等都属于storage-class-specifiers而是改成了一个类型指示符type-specifier。 auto初探 不同于Python等动态类型语言的运行时变量类型推导隐式类型定义如auto x 5;的类型推导 发生在编译期。它的作用是让编译器自动 推断出这个变量的类型而不需要显式指定类型 auto x 5; //OK: x是int类型 //字面量5是const int类型变量x将被推导为int类型const被丢弃 auto pi new auto(1); //OK: pi被推导为int* const auto *v x, u6; //OK: v是const int*类型u是const int类型 //因为vu已经被推导为const int类型 //1. u必须初始化不然编译不予通过 //2. u的初始化不能使编译器产生二义性。如u6.6编译器会报错 static auto y - 0.0; //OK: y是double类型 auto int r; //error: auto不再表示存储类型指示符编译器报错 auto s; //error: auto无法推导出s的类型编译器报错隐式的类型定义也是 强类型定义 auto所在那行已经准确推断出其类型了auto只能用于 类型推导 不能用于存储类型指示符的推导比如auto int r 5;auto并不能代表一个实际类型的声明如s的编译器错误它只是一个类型声明的“占位符”auto声明的变量必须马上初始化以让编译器推断出它的实际类型并在编译时将其替换为真正的类型 推导规则 auto可以通指针、引用结合起来使用还可以带上cv限定符cv-qualifier, const和volatile限定符的统称 推导规则 当不声明为指针或引用时auto的推导结果和初始化表达式抛弃引用和cv限定符后类型一致当声明为指针或引用时auto的推导结果将保持初始化表达式的cv属性 int x 0;auto *a x; //a - int* auto被推导为int auto b x; //b - int* auto被推导为int* //auto不声明为指针也可以推导出指针类型 auto c x; //c - int auto被推导为int auto d c; //d - int auto被推导为int //当表达式是一个引用类型时auto会把引用类型抛弃const auto e x; //e - const int auto被推导为int auto f e; //f - int auto被推导为int(non-const int) //当表达式带有constvolatile也一样属性时auto会把const属性抛弃掉const auto g x; //e - const int auto被推导为int auto h g; //f - const int auto被推导为const int//auto和引用或指针结合时auto的推导将保留表达式的const属性auto的推导和函数模板参数的自动推导 auto的推导和函数模板参数的自动推导有相似之处 上面的例子中的auto和下面的模板参数自动推导出来的类型是一致的 templatetypename T void func(T x) {} //T - auto templatetypename T void func(T *x) {} //T* - auto * templatetypename T void func(T x) {} //T - auto templatetypename T void func(const T x) {} //const T - const auto templatetypename T void func(const T* x) {} //const T* - const auto* templatetypename T void func(const T x) {} //const T - const auto因此在熟悉auto推导规则时可以借助函数模板的参数自动推导规则来帮助和加强理解。 auto的限制 void func(auto a 1) {} //error: auto不能用于函数参数struct Foo{auto var1_ 0; //error: auto不能用于非静态成员变量static const auto var2_ 0; //OK: var2_ - static const int//auto仅能用于推导static const的整形或枚举成员//1. 因为其他静态类型在C标准中无法就地初始化//2. 虽然C11可以接受非静态成员变量的就地初始化但却不支持auto类型非静态成员的初始化 };templatetypename T struct Bar{};void main() {int arr[10] {0};auto aa arr; //OK: aa - int*//aa不会推导为int[10]而是int*auto rr[10] arr; //error: auto无法定义数组Barint bar;Barauto bb bar; //error: auto无法推导出模板参数 }什么时候用auto 迭代器类型等场景auto简化函数定义 不加选择地随意使用auto会带来代码可读性和维护性的严重下降。因此在使用auto的时候一定要权衡好。 auto简化函数定义 class Foo{ public:static int get(void) {return 0;} }; class Bar{ public:static const char* get(void) {return 0;} };templateclass A void func(void){//对类型A都调用静态函数get来获取valauto val A::get();//对val做统一处理//... }funcFoo(); funcBar();如果不用auto就不得不对func再添加一个模板参数并在外部调用时手动指定get()的返回值类型 class Foo{ public:static int get(void) {return 0;} }; class Bar{ public:static const char* get(void) {return 0;} };templateclass A, class B void func(void){B val A::get();//... }funcFoo, int(); funcBar, const char*();参考文章 参考书籍《深入应用C11》
http://www.hkea.cn/news/14341214/

相关文章:

  • wordpress 前台登录插件临沂seo
  • 叙述网站的设计制作流程律师网站 扁平化
  • wordpress整站手机端公司网站备案去哪里备案
  • 网站运营需要多少钱制作小程序难吗
  • 安徽白云集团网站建设做网站交接什么时需要交接
  • o2o网站系统河南做网站公司汉狮
  • 快速做网站软件网站正在建设中提示页面
  • 某班级网站建设方案建设手机银行app下载
  • 经典的网站设计工具开发一个小程序大约需要多少钱
  • 官方网站 优帮云上海百度推广公司排名
  • 网站单页推广创建网站服务器地址
  • 网站首页大小网站开发 分类编码
  • 阿里云镜像wordpress西安网站优化招聘网
  • 网站上做商城可用同一域名建设商务网站目的
  • 表白网站建设cms做网站不用后端
  • 做小说网站做国外域名还是国内的好处郑州app定制开发公司
  • 网站建设树状图私有云可以做网站
  • 门户网站建设审批程序资料共享的网站开发
  • wordpress整站备份插件专升本报名入口官网2023报名时间
  • 网站建设服务规划与措施wordpress 文章点赞插件
  • 网站营销是什么网站推广排名哪家公司好
  • 做手机网站做网站什么什么
  • wordpress 网站搭建北京市网站开发
  • 三亚同城招聘网站阿里云云主机做网站
  • 哪个公司可以专门做网站discuz注册
  • 网站 php 源码seo优化技术教程
  • 保险网站定制安徽网络优化方案
  • 新加坡网站制作如何去看网站是不是响应式
  • 织梦如何做二级网站江西手机版建站系统开发
  • 网站建设公司一般几个人wordpress加载本地媒体