xvalue的定义如下:
- xvalue("eXpiring"值)也指对象,通常接近其生命周期的末尾(例如,可以移动其资源).xvalue是涉及rvalue引用的某些表达式的结果(8.3.2).[示例:调用返回类型为右值引用的函数的结果是xvalue. - 末端的例子]
我们是否会陷入我们实际需要使用其返回类型为右值引用的函数的位置,该函数是xvalue?
const int && Foo()
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
移动语义将右值引用作为参数,而不是返回值.所以我认为不是这样的.
返回rvalue引用可用于已将rvalues作为参数的函数.一个简单的例子:
struct X {
X() = default;
X(X&& other) { std::cout << "move ctor\n"; }
X(X const&) = delete;
void log(std::string const& s){ std::cout << "log: " << s << "\n"; }
};
void sink(X&& x) {
x.log("sink");
}
X&& passOn(X&& in) {
in.log("pass");
return std::move(in);
}
X moveOn(X&& in) {
in.log("move");
return std::move(in);
}
int main() {
sink(passOn(X()));
std::cout << "===============================\n";
sink(moveOn(X()));
}
Run Code Online (Sandbox Code Playgroud)
第二个函数将调用move构造函数来创建返回的对象,而第一个函数将传递它已经获得的引用.如果我们不返回原始引用而是返回对引用对象的一部分的引用,例如,这更有用
template<class T>
T&& getHead(std::vector<T>&& input) {
return std::move(input.front());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
863 次 |
最近记录: |