非常简单的问题,我无法用谷歌搜索出答案。
例如:
int a = 0;
int& b = x;
int&& c = 1;
decltype((a)) x; // what is the type of x?
decltype((b)) y; // what is the type of y?
decltype((c)) z; // what is the type of z?
不确定,也许我应该为x,y和z分配一些值以获得不同的结果。
编辑:
根据以下括号中的位置,将示例int
转换为参考:
https://github.com/AnthonyCalandra/modern-cpp-features#decltype
int a = 1; // `a` is declared as type `int`
int&& f = 1; // `f` is declared as type `int&&`
decltype(f) g = 1; // `decltype(f) is `int&&`
decltype((a)) h = g; // `decltype((a))` is int&
答案 0 :(得分:6)
所有类型均为int&
。
加上(a)
之类的括号使它们成为表达式(而不是 entity ),它们都是左值(作为命名变量);那么decltype
会变成T&
,即这里的int&
。
...
4)如果参数是
T
类型的任何其他表达式,并且...
b)如果表达式的值类别为左值,则decltype产生
T&
;...
您可以使用此LIVE DEMO(从编译错误消息中)检查实际类型。
答案 1 :(得分:4)
根据C++ Primer:
当我们将
unable to upload artifact
应用于没有括号的变量时,我们得到 该变量的类型。如果我们将变量名包装成一个或 更多的括号,编译器会将操作数作为 表达。变量是可以在左侧的表达式 的任务。结果,这样的表达式上的decltype
产生 参考:decltype
答案 2 :(得分:3)
请注意,如果将对象名称加括号,则将其视为 一个普通的左值表达式,因此decltype(x)和decltype((x))是 通常是不同类型。
https://en.cppreference.com/w/cpp/language/decltype
据我了解,(x)
是一个空表达式,它返回对x
的引用。因此
decltype(x)
是int
declytpe((x))
是int&