我想使用等效的std::pair<bool, std::string>
作爲函數返回類型。在下游代碼中,使用ok
和msg
而不是first
和second
訪問器會更好,以避免不必要的API查找。而且我似乎無法使用繼承正確地編寫它,因爲std::pair
可能會在沒有虛擬析構函數的情況下泄漏。想要避免我自己的結構作爲Renamed std::pair members中的解決方案 - 重用現有的Move構造函數和其他管道。它有可能嗎?專門對中的自定義存取器名稱
編輯:
後的反饋似乎是推薦的路要走是:
struct res {
bool ok;
std::string msg;
};
res fnk() { ...; return r };
難道我理解正確的是C++編譯器11預計將產生移動的構造,以避免複製字符串?
編譯器爲您提供了所有必要的管道。你不能免費得到的是關係運算符和一個「std :: make_pair」等價物。 – juanchopanza
你是說在'struct res {bool ok; std :: string msg}; res fnk(){...; return r};''當'fnk'返回時''會自動將'r'的值移入接收者? –
這取決於你如何調用函數,但最有可能的情況是你得到複製elision。但編譯器會爲你生成一個移動拷貝構造函數和一個移動拷貝賦值操作符(除非你定義了你自己的構造函數,在這種情況下,你可以使用'default'重新啓用它們。請參見[here](http:// stackoverflow。 COM /問題/ 4943958 /條件換自動生成 - 的 - 默認構造函數,拷貝構造函數和默認 - 阿西))。 – juanchopanza