上海做网站找哪个公司好,网站安全建设总结报告,厦门网站建设高级课程,网站建设php有哪些作者#xff1a;守望#xff0c;Linux应用开发者#xff0c;目前在公众号【编程珠玑】 分享Linux/C/C/数据结构与算法/工具等原创技术文章和学习资源。前言你以为我说的自动变量类型auto吗#xff1f;非也#xff0c;我们知道C语言中其实也有auto关键字#xff0c;它和早… 作者守望Linux应用开发者目前在公众号【编程珠玑】 分享Linux/C/C/数据结构与算法/工具等原创技术文章和学习资源。前言你以为我说的自动变量类型auto吗非也我们知道C语言中其实也有auto关键字它和早期C中的auto关键字一样它修饰局部变量表示自动存储期(更多内容也可以阅读《全局变量静态全局变量局部变量静态局部变量》)不过由于默认就是这种因此我们其实常常见不到这样的写法auto int a 10;本文要介绍的并不是上面的auto而是C11中引入的auto关键字。效果看看下面的代码#include//来源公众号【编程珠玑】#includeint main(){ std::vectorint vec{1,2,3,4,5}; for(std::vectorint::const_iterator it vec.begin();it ! vec.end();it) { std::coutstd::endl; } return 0;}对于it的类型你自己能快速写出来吗我反正是写不出来。再看auto版本#include#includeint main(){ std::vectorint vec{1,2,3,4,5}; for(auto it vec.begin();it ! vec.end();it) { std::coutstd::endl; } return 0;}是不是简洁了许多没错今天就是介绍自动类型推导关键字auto。auto的作用说实在的程序员有时候就是“懒”可能连个表达式的类型都不想写auto就是这样一个关键字它让编译器替我们去分析表达式的类型。当然了分析的前提是auto定义的变量有初值如果连值都没有怎么可能知道它是什么类型auto用法普通类型推导例如auto i 10;//i为int类型auto d 10.2//d 为double类型auto f 10.2f//f为float类型const关键字修饰的类型推导通常auto会忽略掉顶层const(本身是常量如int *cosnt p)而会保留底层const(指向的对象是常量如const int* p)。关于const的更多内容可以参考《C与C中的const关键字有何差别》举个例子顶层const的例子const int ci 10;auto aci ci;//忽略顶层const推导ci是int所以aci类型是intconst auto ca ci//推导ci是int但是前面有const所以ca是const int再说一个底层const的例子const int arr[] {11};auto p arr;//arr 是const int *,这是底层const推导后保留底层const所以p是 const int*arr数组名被当成指针是是const int*类型或者说是int const*它指向的对象是只读的因此是底层const保留最终p的类型也是int const *。当然auto还可以设置引用类型例如const int ci 10;auto cp ci;//cp是一个整型常量引如果是字面值则必须加上constconst auto ref 10;//10是字面值常量引用才能绑定字面值想一想想想下面推导的size类型是什么std::vectorint vec;auto size vec.size();没错它是std::vector::size_type。要你写下来你肯定不愿意。不过下面这样是没法推导的奥 vectorstring aa; //vector bb aa;//无法推导出模板类型下面这段程序帮你查看真正类型的名称仅供参考#include //编程珠玑#include #include #include int main(){ int status; char *realname; auto type 1.1; realname abi::__cxa_demangle(typeid(type).name(), 0, 0, status); std::cout typeid(type).name() std::endl; free(realname); return 0;}输出结果double总结乍一看好像挺简单的那么一回事不过使用auto最好注意类型推导规则不是很明确的规则不建议以代码可读性为代价而简化代码。当然了它也有以下特点可能使得代码可读性差某些情况auto得到的类型可能不是你想要的因此一定要合理使用。●编号611输入编号直达本文●输入m获取文章目录C语言与C编程分享C/C技术文章