【发布时间】:2014-12-02 18:34:32
【问题描述】:
我在玩 C++ 模板类型推导,并设法编译了这个小程序。
template<typename T>
void f(const T& val)
{
val = 1;
}
int main()
{
int i = 0;
f<int&>(i);
}
它可以在所有主要编译器上编译,但我不明白为什么。为什么f 可以分配给val,而val 被明确标记为const?是这些编译器中的错误还是根据 C++ 标准的有效行为?
【问题讨论】:
-
参考折叠。
-
@πάνταῥεῖ 这对我来说似乎不对。对左值引用的左值引用是左值引用,而不是右值引用,因此它应该扩展为
void f(const int&)。