C 双地址运算符? (&&)

新手上路,请多包涵

我正在阅读 STL 源代码,但我不知道 && 地址运算符应该做什么。这是来自 stl_vector.h 的代码示例:

 vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
    // NB: DR 675.
    this->clear();
    this->swap(__x);
    return *this;
}

“地址”是否有意义?为什么它有两个地址运算符而不是一个?

原文由 Anarki 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 812
2 个回答

这是 C++11 代码。在 C++11 中, && 标记可用于表示“右值引用”。

原文由 aschepler 发布,翻译遵循 CC BY-SA 3.0 许可协议

&& 是 C++11 中的新内容。 int&& a 表示“a”是一个 r 值参考。 && 通常只用于声明函数的参数。 它只 需要一个 r 值表达式。如果你不知道什么是 r 值,简单的解释是它没有内存地址。例如,数字 6 和字符“v”都是 r 值。 int a ,a 是一个左值,但是 (a+2) 是一个右值。例如:

 void foo(int&& a)
{
    //Some magical code...
}

int main()
{
    int b;
    foo(b); //Error. An rValue reference cannot be pointed to a lValue.
    foo(5); //Compiles with no error.
    foo(b+3); //Compiles with no error.

    int&& c = b; //Error. An rValue reference cannot be pointed to a lValue.
    int&& d = 5; //Compiles with no error.
}

希望这是有益的。

原文由 Lexseal Lin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题