C 11:DeclType((x))和DeclType(((x 1))的类型不同
C++11: the type of decltype((x)) and decltype((x+1)) are different?
我认为decltype((x))给出&参考类型,但一些实验显示了其他:
#include<stdio.h>
int main(){
int x = 0;
decltype((x)) r = x;
r = 1;
printf("%dn",x);
decltype((x+1)) i = x;
i = 2;
printf("%dn",x);
decltype((1)) k = x;
k = 3;
printf("%dn",x);
return 0;
}
我期望(x)和(x 1)和(1)都会给出一个" int&amp;"。但是运行结果是
1
1
1
我期望运行结果应为1,2,3,因为每个声明都检索参考,但似乎只有第一个作品,而(x 1)an(1)仅给出INT,而不是'int&amp;'。为什么,(x)和(x 1)的不同ID-表达类型?
x + 1
是一个prvalue,因此其声明只是 int
。相比之下,x
是ID表达式,因此(x)
是LVALUE,其声明为int&
。(有一个特殊的规则,通过该规则,ID表达本身的声明本身(例如x
)是声明该变量的实际类型,您必须将括号化表达式以在表达式的值类别中获得。)<)
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 是否可以在不使用 decltype 的情况下推断先前定义的 extern 变量的类型
- c++ 11 带有 decltype 的尾随返回类型无法按预期工作
- 我可以使用 decltype() 或其他东西通过指针获取真实类型吗?
- 来自 decltype 的意外输出类型
- 有条件地选择带有 decltype() 和三元运算符的类型
- 为什么在 ctor 的参数列表中将成员"x"的类型替换为"decltype(x)"会破坏类模板参数推导?
- C++中的可视化 Decltype 表达式类型推导
- 不完整类型的调用运算符的 decltype 的特殊行为
- decltype(auto) 是否使尾随返回类型过时?
- 用 decltype 和 auto 推导出 const(返回)类型
- 元函数使用 decltype 返回元素类型
- 不同类型的"decltype((const int)a)"和"decltype((cons
- 关于 C++ 中面向对象中的 decltype 类型
- 使用“decltype”获取迭代器的类型
- 如何使用非尾随 decltype 返回类型定义行外类模板成员函数
- clang 拒绝具有尾随 decltype 返回类型的模板调用是否正确,具体取决于其重载之一?
- 尾随返回类型中去 decltype 的原因
- decltype(function_name) 的返回类型是完全无用的
- 如何通过扩展以下类型特征来删除 decltype(&MyClass::funct) 部分?