我一直认为接受通用引用的以下函数必须返回一个const-reference.
template <typename T>
const T& Const(T&& val)
{
return val;
}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码使用VS C++和gcc成功编译:
int x = 5;
Const(x) = 6;
Run Code Online (Sandbox Code Playgroud)
运行后变量x的值等于6.因此,Const函数返回非const引用.
要获得编译器错误,必须修改函数Const以接受传统的l值引用或声明为返回const std::remove_reference_t<T>&.
这是为什么?我错过了什么规则?提前致谢!
Vit*_*meo 15
一个普遍的参考
不,他们被称为"转发参考"."通用引用"一词已弃用.
这是为什么?
当你调用时Const(x),x是一个左值,因此T推导为int&.您的退货类型将变为:
const T & = T const &- > int & const &- >int &int & const &是对与其相同的引用的const引用.(在这种情况下,适用于,不只是作为).intint&constint&intT = int&