相关疑难解决方法(0)

什么是右值,左值,x值,glvalues和prvalues?

在C++ 03中,表达式是rvaluelvalue.

在C++ 11中,表达式可以是:

  1. 右值
  2. 左值
  3. x值
  4. glvalue
  5. prvalue

两类已成为五大类.

  • 这些新的表达类别是什么?
  • 这些新类别如何与现有的左值和左值类别相关联?
  • C++ 0x中的右值和左值类别是否与它们在C++ 03中的相同?
  • 为什么需要这些新类别?是WG21神只是想迷惑我们凡人?

c++ expression c++-faq c++11

1291
推荐指数
13
解决办法
17万
查看次数

将文字常量分配给右值参考时会发生什么?

这无疑是一个挑剔的问题,主要是出于好奇心.假设我们有以下内容:

int x = 5;
int&& xref = std::move(x);
std::cout << "Before assignment x: " << x << std::endl;
std::cout << "Before assignment xref: " << xref << std::endl;
xref = 10;
std::cout << "After assignment x: " << x << std::endl;
std::cout << "After assignment xref: " << xref << std::endl;
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

// Before assignment x: 5
// Before assignment xref: 5
// After assignment x: 10
// After assignment xref: 10
Run Code Online (Sandbox Code Playgroud)

这是有道理的. std::move转换x为xvalue并允许我们将其内存位置绑定到xref并相应地修改其内容.现在让我们说我们有以下内容: …

c++ move-semantics

11
推荐指数
2
解决办法
329
查看次数

auto && variable不是右值引用

为什么auto &&不是右值参考?

Widget&& var1 = Widget(); // rvalue reference
auto&& var2 = var1; //var2 not rvalue reference
Run Code Online (Sandbox Code Playgroud)

下面是右值参考示例

void f(Widget&& param); // rvalue reference
Widget&& var1 = Widget(); // rvalue reference
Run Code Online (Sandbox Code Playgroud)

为什么var2不是右值参考,而f和var2是右值参考?

c++ auto c++11 forwarding-reference

3
推荐指数
1
解决办法
676
查看次数