【发布时间】:2019-05-09 16:59:49
【问题描述】:
在下面的代码中,a和b的类型分别是什么?
template <class T = const int&>
struct A
{
T& a;
T b;
};
int main() {
int i = 1;
A<> a{i, i};
return 1;
}
我使用了这篇文章中的代码,它可以给出变量的类型。 -> post
但是,它说这两种类型都是i const&。
int main() {
int i = 1;
A<> a{i, i};
std::cout << type_name<decltype(a.a)>() << std::endl;
std::cout << type_name<decltype(a.b)>() << std::endl;
return 0;
}
在上述情况下T& 和T 是同一类型吗?
这些 & 符号是否结合并成为 r 值或其他规则?
【问题讨论】:
-
同意。这可能不是最好的副本,但它解释了参考折叠规则。 TL;DR:& 符号确实结合,但它们形成左值引用,而不是右值引用。
-
我个人认为作为交叉引用比欺骗更好,但无论如何:)
标签: c++ templates reference-type