Olp*_*ers 42 c++ decltype c++11
我无法找到对decltype的一个很好的解释.请告诉我,作为一名初学程序员,它的作用以及它为何有用.
例如,我正在读一本提出以下问题的书.有人可以向我解释答案和原因,以及一些好的(初级)例子吗?
当代码完成时,每个变量的类型和每个变量的值是多少?
Run Code Online (Sandbox Code Playgroud)int a = 3, b = 4; decltype(a) c = a; decltype((b)) d = a; ++c; ++d;
逐行解释将非常有帮助.
Ker*_* SB 62
decltype是一种指定类型的方法:给它一个表达式,并decltype返回一个对应于表达式类型的类型.具体来说,decltype(e)是以下类型:
如果e是变量的名称,即"id-expression",则结果类型是变量的类型.
否则,如果e求值为lvalue类型T,则结果类型为T &,并且如果e求值为rvalue类型T,则结果类型为T.
将这些规则与参考折叠规则相结合,可以让您理解decltype(e) &&,这始终是一个"合适的"参考.(C++ 14还增加decltype(auto)了为你提供的类型推导auto与值类别语义相结合decltype.)
例子:
int foo();
int n = 10;
decltype(n) a = 20; // a is an "int" [id-expression]
decltype((n)) b = a; // b is an "int &" [(n) is an lvalue]
decltype(foo()) c = foo(); // c is an "int" [rvalue]
decltype(foo()) && r1 = foo(); // int &&
decltype((n)) && r2 = n; // int &
Run Code Online (Sandbox Code Playgroud)
值得强调的是auto和之间的区别decltype:auto处理类型,并decltype处理表达式.
你不应该decltype在"日常"编程中看到或使用它.它在通用(模板化)库代码中最有用,其中所讨论的表达式是未知的并且取决于参数.(相比之下,auto可以在所有地方慷慨地使用.)简而言之,如果你是编程的新手,你可能不需要使用decltype一段时间.
| 归档时间: |
|
| 查看次数: |
12672 次 |
| 最近记录: |