我正在阅读STL源代码,但我不知道
&&
地址运算符应该做什么。这是来自stl_vector.h
的代码示例:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
“地址的地址”有意义吗?为什么它有两个地址运算符而不是只有一个?
&&
是 C++11 中的新功能。 int&& a
表示“a”是 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.
}
希望能提供有用的信息。
代码。在 C++11 中,&&
标记可用于表示“右值引用”。