duo*_*gja 0 c++11 value-categories
我现在正在学习 C++ 11 并且对 C++ 11 中表达式的值类别感到困惑。根据术语,左值是 W 的左上角,即 iM(或有时是 im),意思是“具有身份但不能移动从”。这真的让我很困惑。请考虑以下示例:
#include <iostream>
int main()
{
int a = 0, b = 1, c = 2;
a = std::move(b = c);
std::cout << a << '\n';
}
Run Code Online (Sandbox Code Playgroud)
这个例子编译得很好。
我们都知道赋值b = c是一个左值,那么“不能移动”是什么意思?请举例说明这一点!
谢谢!
大致说来:
一个左值具有的身份,因为你可以把它的地址
int x;
&x; // ok
Run Code Online (Sandbox Code Playgroud)一个左值不能从,因为它不能被用来作为一个参数来移动的构造/分配移动
struct Foo
{
Foo(Foo&); // 0
Foo(Foo&&); // 1
};
Foo x;
Foo y{x}; // calls 0, not 1
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,x是一个左值:调用复制构造函数。如果你想从移动x,你需要使它的右值:这就是为什么你必须使用std::move(x),以将其转换为右值引用。
Foo y{std::move(x)}; // calls 1
Run Code Online (Sandbox Code Playgroud)在您的例子std::move(b = c)是一个右值,因为std::move是从字面上只是static_cast一个右值引用。
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |