我正在阅读this article on Wikipedia regarding C++11
Type Inference feature。
有一个例子,我引用:
#include <vector>
int main() {
const std::vector<int> v(1);
auto a = v[0]; // a has type int
decltype(v[1]) b = 1; // b has type const int&, the return type of
// std::vector<int>::operator[](size_type) const
auto c = 0; // c has type int
auto d = c; // d has type int
decltype(c) e; // e has type int, the type of the entity named by c
decltype((c)) f = c; // f has type int&, because (c) is an lvalue
decltype(0) g; // g has type int, because 0 is an rvalue
}
以下几行:
decltype(c) e; // e has type int, the type of the entity named by c
decltype((c)) f = c; // f has type int&, because (c) is an lvalue
c
和(c)
之间有什么区别?为什么(c)
代表左值?
答案 0 :(得分:21)
c
是变量的名称;
(c)
是一个表达式,在本例中是 lvalue 表达式,其值与变量c
的值相同。
decltype
对两者的处理方式不同。例如,考虑decltype(1+2)
,这也是一个采用表达式的示例。只是碰巧你的例子是一个表达式的简单版本:一个只是命名一个变量,并且没有什么令人兴奋的。
如果您对语言规范的细微部分进行合理化,那么您通常只关心这些差异之一;但是,正如您所确定的那样,在这种情况下它具有非常重要的实际效果。
请注意,此处没有运营商用法。这只是语法布局的一个推论。
答案 1 :(得分:9)