可移動轉換運算符的語法是什麼?移動轉換運算符的語義
我有一個包裝,環繞obj
,其中有一個obj
轉換操作符:
class wrap {
public:
operator obj() { ... }
private:
obj data_;
};
我如何才能知道是否data_
應該被複制或移動?
可移動轉換運算符的語法是什麼?移動轉換運算符的語義
我有一個包裝,環繞obj
,其中有一個obj
轉換操作符:
class wrap {
public:
operator obj() { ... }
private:
obj data_;
};
我如何才能知道是否data_
應該被複制或移動?
該語法將是這樣的:
class wrap {
public:
operator obj() const & { ... } //Copy from me.
operator obj() && { ... } //Move from me.
private:
obj data_;
};
第一個版本將被調用時,第二個版本不能稱之爲(即:要轉換的wrap
實例不是暫時的,或者沒有明確使用std::move
)。
請注意,Visual Studio沒有實現r值引用的這個方面。
'const'甚至可能是需要的,因爲通常複製操作是'const'。 –
@Luc:好點。固定。 –
我認爲'operator obj const&()const&'更合理,如果返回值是一個子對象。沒有必要複製。同樣,'operator obj &&()&&'會消除移動構造,即使它預期爲O(1)。 – Potatoswatter
無論如何,你怎樣才能將'data_'移動到'std :: string'中?如果'data_'也是'std :: string',這個問題會更有意義。 – ildjarn
@ildjarn問題是關於在轉換運算符上移動語義,而不是關於char *或std :: string。 –
好的,這樣做更有意義。作爲第一個例子,您恰好選擇了最糟糕的數據類型。 ; - ] – ildjarn