【发布时间】:2016-06-30 09:10:06
【问题描述】:
我看不懂c++11中的函数move。
来自here,我得到了以下信息:
虽然请注意 - 在标准库中 - 移动意味着 移出对象处于有效但未指定的状态。哪一个 意味着,在这样的操作之后,移动的值 对象应该只被销毁或分配一个新值;访问它 否则会产生一个未指定的值。
在我看来,在 move() 之后,被移动的对象已经“清除”了。但是,我在下面做了一个测试:
std::string str = "abcd";
std::move(str);
std::cout<<str;
我的屏幕上出现了abcd。
那么str 被销毁了吗?如果是这样,我可以得到abcd,因为我很幸运?还是我误解了函数move?
另外,当我阅读C++ Primer时,我得到了这样一个代码:
class Base{/* ... */};
class D: public Base{
public:
D(D&& d): Base(std::move(d)){/* use d to initialize the members of D */}
};
我现在很困惑。如果函数move会清空对象,参数d会清空,怎么能“用d初始化D的成员”呢?
【问题讨论】:
-
你很幸运。或者倒霉,这取决于你的观点。