Cli*_*ton 7 c++ rvalue-reference c++11
阅读关于从函数返回右值引用的这个答案让我思考,如何id在C++ 0x中编写函数.
基本上,我想做id一个什么都不做的功能,这个功能对程序没有任何可观察的影响.
我的第一次尝试如下:
#include <iostream>
class X
{
public:
X(std::string&& s) : s(std::move(s)) {};
X(const std::string& s) : s(s) {};
std::string s;
~X() { std::cout << "Destroying: " << s << std::endl; }
private:
X(const X&) {};
X(X&&) {};
};
template <class T>
T&& id(T&& x) { return static_cast<T&&>(x); }
int main()
{
auto&& x1 = X("x1");
std::cout << "Line 1" << std::endl;
auto&& x2 = id(X("x2"));
std::cout << "Line 2" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,我担心在这种情况下,x2是一个悬空参考,就像X("x2")在"第2行"执行之前被破坏一样.
所以在这里,很明显id有一个可观察到的效果.
如何id在C++ 0x中编写函数,特别适用于没有移动/复制构造函数的类型.
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |