小编Ale*_*yan的帖子

接受通用引用并返回const引用的函数的无法解释的行为

我一直认为接受通用引用的以下函数必须返回一个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>&.

这是为什么?我错过了什么规则?提前致谢!

c++ c++11 c++14

12
推荐指数
1
解决办法
252
查看次数

函数返回值的 auto 与 auto&amp;&amp;

您能告诉我,使用 auto&& 作为函数返回值总是比使用 auto 更好的选择吗?例如,在

auto val = someObj.getVal();
Run Code Online (Sandbox Code Playgroud)

如果 getVal() 返回引用,则 val 将是一个副本。但是,使用通用引用auto&&就没有这样的缺点吗?我需要知道的唯一信息是 getVal() 是否为 const。

c++ function return-value auto c++11

6
推荐指数
1
解决办法
1438
查看次数

标签 统计

c++ ×2

c++11 ×2

auto ×1

c++14 ×1

function ×1

return-value ×1