Ara*_*raK 11 c++ this rvalue move-semantics c++11
请问,有人可以用简单的英语解释什么是"将移动语义扩展到*这个"?我指的是这个提议.所有我们正在寻找的是什么,为什么我们需要它.请注意,我确实理解rvalue引用通常是什么,构建了移动语义.我无法理解这样的扩展为rvalue引用添加了什么!
Unc*_*ens 10
ref-qualifier特性(指示类型*this
)将允许您区分是否可以在rvalues或lvalues(或两者)上调用成员函数,以及基于此重载函数.第一个版本在非正式部分给出了一些理由:
防止意外:
Run Code Online (Sandbox Code Playgroud)struct S { S* operator &() &; // Selected for lvalues only S& operator=(S const&) &; // Selected for lvalues only }; int main() { S* p = &S(); // Error! S() = S(); // Error! }
启用移动语义:
Run Code Online (Sandbox Code Playgroud)class X { std::vector<char> data_; public: // ... std::vector<char> const & data() const & { return data_; } std::vector<char> && data() && { return data_; } //should probably be std::move(data_) }; X f(); // ... X x; std::vector<char> a = x.data(); // copy std::vector<char> b = f().data(); // move
例如,如果您愿意,可以使用rvalue引用将运算符重载为自由函数:
Foo operator+(Foo&& a, const Foo& b)
{
a += b;
return std::move(a);
}
Run Code Online (Sandbox Code Playgroud)
要使用成员函数实现相同的效果,您需要引用的提议:
Foo Foo::operator+(const Foo& b) && // note the double ampersand
{
*this += b;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
双&符说"这个成员函数只能在rvalues上调用".
这里*this
讨论是否必须明确地从这样的成员函数中移动.
归档时间: |
|
查看次数: |
424 次 |
最近记录: |