Ana*_*rki 116 c++ stl memory-address operator-keyword
我正在阅读STL源代码,我不知道&&
运算符应该做什么.以下是一个代码示例stl_vector.h
:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
Run Code Online (Sandbox Code Playgroud)
"地址"是否有意义?为什么它有两个地址运算符而不是一个?
Xin*_*Lin 140
&&
是C++ 11中的新功能.int&& a
表示"a"是r值参考.&&
通常仅用于声明函数的参数.它仅需要一个R值表达式.如果您不知道r值是什么,简单的解释是它没有内存地址.例如数字6,字符'v'都是r值.int a
,a是l值,但是(a+2)
是r值.例如:
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.
}
Run Code Online (Sandbox Code Playgroud)
希望这是有益的.
Mic*_*urr 30
正如其他答案所提到的,&&
此上下文中的标记是C++ 0x(下一个C++标准)的新内容,并代表"右值引用".
Rvalue参考是即将推出的标准中最重要的新事物之一; 它们支持对象的"移动"语义,并允许完美转发函数调用.
这是一个相当复杂的主题 - 最好的介绍之一(这不仅仅是粗略的)是Stephan T. Lavavej的一篇文章,"Rvalue参考:VC10中的C++ 0x特性,第2部分"
请注意,这篇文章读起来仍然很重,但非常值得.即使它在Microsoft VC++博客上,所有(或几乎所有)信息都适用于任何C++ 0x编译器.
我相信这是一个移动运算符。operator=
是赋值运算符,比如说vector x = vector y
。的clear()
函数调用听起来像处理是否它被删除向量的内容,以防止内存泄漏。运算符返回一个指向新向量的指针。
这边走,
std::vector<int> a(100, 10);
std::vector<int> b = a;
for(unsigned int i = 0; i < b.size(); i++)
{
std::cout << b[i] << ' ';
}
Run Code Online (Sandbox Code Playgroud)
即使我们给了向量 a 值,向量 b 也有值。这就是魔力operator=()
!
归档时间: |
|
查看次数: |
89580 次 |
最近记录: |