gpt4 book ai didi

c++ - 普通的右值引用和 std::forward 返回的有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 22:12:36 26 4
gpt4 key购买 nike

我做不到:

int &&q = 7;
int &&r = q;
//Error Message:
//cannot convert from 'int' to 'int &&'
//You cannot bind an lvalue to an rvalue reference

如果我理解正确,在初始化右值引用时,也会初始化一个临时变量。所以 int &&q = 7; 可以认为是:

int temp = 7;
int &&q = temp;

当在右侧使用引用时,我实际上是在使用裁判。所以 int &&r = q; 可以认为是:

int &&r = temp;  //bind an lvalue to an rvalue reference, cause error, understandable

以上是我对编译器错误发生的理解。


为什么添加 std::forward 可以解决这个问题?

int &&q = 7;
int &&r = std::forward<int>(q);

我知道 std::forward 总是返回一个右值引用,std::forward 返回的引用与 int&&q 有什么不同?

最佳答案

how is the reference returned by std::forward different from int&&q ?

他们的value categories是不同的。请注意,类型和值类别是不同的东西。

q 是一个命名变量,限定为lvalue ,所以它不能绑定(bind)到右值引用。

(强调我的)

the name of a variable, a function, a template parameter object (since C++20), or a data member, regardless of type, such as std::cin or std::endl. Even if the variable's type is rvalue reference, the expression consisting of its name is an lvalue expression;

虽然从函数返回的右值引用被限定为 xvalue ,属于 rvalue .

a function call or an overloaded operator expression, whose return type is rvalue reference to object, such as std::move(x);

关于c++ - 普通的右值引用和 std::forward 返回的有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51998385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com