auto 虽然在书写格式上比 decltype 简单,但是它的推导规则复杂,有时候会改变表达式的原始类型;而 decltype 比较纯粹,它一般会坚持保留原始表达式的任何类型,让推导的结果更加原汁原味。 从代码是否健壮的角度考虑,我推荐使用 decltype,它没有那么多是非;但是 decltype 总是显得比较麻烦,尤其是当表达式比较复杂时,例如: ...
1、auto是推导不出来顶层const的(顶层const就是保证自己内存地址里面存放的值不会变,底层const保证的是所指向的值,值本身不会变) 2、想要auto推导出来的类型是一个引用,通过下面方式(a是变量名) auto &a; 1. inta=3;int&b=a; auto c=b; c=5; cout<< a <<c;//输出 3 5,可见推导出来的c变量是一...
和原来那些只对应某种特定的类型说明符(例如 int)不同 auto让编译器通过初始值来进行类型推演。从而获得定义变量的类型,所以说auto定义的变量必须有初始值。 (2)decltype 有的时候我们还会遇到这种情况,我们希望从表达式中推断出要定义变量的类型,但却不想用表达式的值去初始化变量。还有可能是函数的返回类型为某表达...
decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导。不了解 auto 用法的读者请转到《C++ auto》。 decltype 是“declare type”的缩写,译为“声明类型”。 既然已经有了 auto 关键字,为什么还需要 decltype 关键字呢?因为 auto 并不适用于所有的自动类型推导场景,在某...
decltype的自动类型推断会发生在编译阶段和auto一样 decltype不会直接计算表达式的值变量#include <iostream> #include <string> #include #include <boost/type_index.hpp> using namespace std; class Test { public: int i; int j; }; int main() { const int i = 0; const int& def_i = i; aut...
现代C++之理解decltype decltype用于生成变量名或者表达式的类型,其生成的结果有的是显而易见的,可以预测的,容易理解,有些则不容易理解。大多数情况下,与使用模板和auto时进行的类型推断相比,decltype作用于变量名或者表达式只是重复了一次变量名或者表达式的确切类型: ...
Decltype is auto's not-evil twin. Auto lets you declare a variable with a particular type; decltype lets you extract the type from a variable (or any other expression). What do I mean? int x = 3; decltype(x) y = x; // same thing as auto y = x; ...
1. decltype关键字 (1)auto所修饰的变量必须被初始化,编译器才能通过初始化来确定auto所代表的类型,即必须先定义变量。 (2)decltype可以在编译期推导出一个变量或表达式的结果类型(但不会真正计算表达式的值),并且使用这个结果定义新的变量。 【实例分析】获取表达式的类型 ...
std::function func = print; auto boundFunc = std::bind(func, 1, std::placeholders::_1); boundFunc(2); // prints 3 ``` 问题:请解释C++11中的类型推导和decltype关键字的作用。 参考答案:类型推导允许编译器自动推断变量的类型,如使用auto关键字。decltype关键字用于查询表达式的类型,而不评估它。例...
编译器错误 C3551 如果使用尾随返回类型,则主要返回类型应该是单个类型说明符“auto”(而不是“type”) 编译器错误 C3552 应该为“decltype(auto)” 编译器错误 C3553 decltype 应为表达式而不是类型 编译器错误 C3554 “type”不能与任何其他类型说明符组合 ...