k
和k2
都是const int&
类型。
这里是完整的列表。请注意,顶级const
将被丢弃为auto
类型扣除。
int main()
{
const int i = 42;
auto j = i; // i is an int (const is top-level)
const auto &k = i; // k is a const int&
auto *p = &i; // p is a const int* (const persists as not top-level).
const auto j2 = i, &k2 = i; // j2 is a const int, k2 is a const int&
}
最后,如果你写了
auto q = &k2;
那么q
类型为const int*
,因为const
不是顶级,因此不被丢弃,但auto
类型推演。这会恢复您观察到的调试信息。
j2
和k2
看起来不同但实际上这是由于声明如何与逗号,比照工作这种混乱可以通过编写
const int j2 = i, &k2 = i;
被松绑你总是可以找到肯定使用C++ 11标准库函数is_same
: 例如
bool am_I_the_same = std::is_same<decltype(k2), const int&)::value
凡decltype
恢复其参数的类型。
参考:http://en.cppreference.com/w/cpp/types/is_same
,问题是......? :) – Pierre
问题是,为什么&k和&k2是不同的类型? –
你怎么知道&k和&k2是不同类型的? – cpplearner