在推导变量类型时,auto 和 decltype 对 cv 限制符的处理是不一样的。decltype 会保留 cv 限定符,而 auto 有可能会去掉 cv 限定符。 以下是 auto 关键字对 cv 限定符的推导规则: 如果表达式的类型不是指针或者引用,auto 会把 cv 限定符直接抛弃,推导成 non-const 或者 non-volatile 类型。 如果表达式的类型...
autox=5;// x 被推导为intautoy=3.14;// y 被推导为doubleautop=&x;// &x 的结果是 int* 指针,所以推导出 p 的类型是 int*autourl="https://kangxishuo.com";// 双引号包围起来的字符串是 const char*,所以推导出 url 的类型是 const char* 2、用于迭代器 在容器操作中,auto可以简化迭代器的声...
前面两篇文章分别介绍了 auto 和 decltype,今天聊聊它们两者之间的区别。
把auto 和 decltype( x ) 看作"类型描述符" decltype ( x ) auto // 仅做语法说明, 不建议滥用类型推导把简单事情复杂化 void syntax() { int a = 0; auto b = a; // int b = a; decltype(b) c = b; // int c = b; decltype(a) *d = &a; // int *d = &a; static_assert(...
decltype(a) b= a;//int b = a;decltype((a)) c = a;//int& c = a;} root@ubuntu:~/c++# g++ -std=c++14auto.cpp -o auto/tmp/ccRONFza.o: In function `main':auto.cpp:(.text+0x20): undefined reference to `intf<int>()'auto.cpp:(.text+0x24): undefined reference to `intf...
在C++11标准中,auto作为关键字被引入,可以用来自动推导变量类型,auto可以用于定义变量,函数返回值,lambda表达式等,在定义变量时可以使用auto来代替具体类型,编译器根据变量初始化表达式推导出变量的类型。同时还引入了decltype关键字,用于推导表达式的类型,decltype与auto的不同之处在于,decltype关键字推导出的类型和表达式的...
这时我们就可以用decltype(auto)来自动推导这个函数的返回值类型,函数的定义如下: template<typename Container,typename Index>decltype(auto)process(Container&c,Index i){// processingreturnc[i];} 当传进来的容器的operator[]函数返回的是引用时,则上面的函数返回的是引用类型,如果operator[]函数返回的是一个值...
为了解决这个问题, C++11 新标准就引入了 auto 类型说明符,通过使用 auto 关键字,我们就能让编译器替我们去分析表达式所属的类型,和原来那些只对应某种特定的类型说明符(例如 int )不同, auto 能让编译器通过初始值来进行类型推演,从而获得定义变量的类型,这样一来,我们就可以大大地降低我们在编程中出现变量类型...
decltype还可以与auto结合使用,以便在需要类型匹配的场景中自动推导变量类型。autox=1;decltype(auto)y=x...
voidfunc(autovalue){}// error,auto不能用作函数参数 classA{ autoa =1;// error,在类中auto不能用作非静态成员变量 staticautob =1;// error,这里与auto无关,正常static int b = 1也不可以 staticconstautointc =1;// ok }; voidfunc2(){ ...