我無法理解在C++ 11中移動的函數。C++ 11:如何理解函數移動
從here,我得到了如下的事情:
雖然注意到 - 在標準庫 - 移動意味着 移動,從對象是在一個有效的,但不確定狀態離開。其中 表示經過這樣的操作後,移動對象 的值應該只銷毀或分配新值;訪問它 否則會產生未指定的值。
在我看來,移動()後,移動的對象已被「清除」。不過,我已經做了如下測試:
std::string str = "abcd";
std::move(str);
std::cout<<str;
我在我的屏幕上了abcd
。
那麼str
被銷燬了嗎?如果是這樣,我可以得到abcd
,因爲我只是幸運?或者我誤解了功能move
?
此外,當我讀到C++入門,我有這樣的代碼:
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的成員」?
你很幸運。或者不幸,取決於你的觀點。 –