[英]Why can't std::ostream be moved?
顯然,流無法復制。 應該可以移動流。 根據27.9.1.11 [ofstream.cons]第4段,可以移動構造std::ofstream
(對於std::ifstream
, std::fstream
和std::*stringstream
變體也是如此)。 例如:
#include <iostream>
#include <fstream>
#include <string>
std::ofstream makeStream(std::string const& name) {
return std::ofstream(name);
}
int main()
{
std::ofstream out{ makeStream("example.log") };
}
嘗試移動std::ostream
,例如,讓工廠函數根據傳遞為參數的URN創建std::ofstream
, std::ostringstream
或其他流,這是行不通的。 std::ostream
(實際上,類模板std::basic_ostream
確實具有根據27.7.3.1 [ostream]的protected
move構造函數。
為什么std::ostream
本身不能移動?
最初它們是可移動的。 事實證明,這是我的設計缺陷,並由Alberto Ganesh Barbati發現:
http://cplusplus.github.io/LWG/lwg-defects.html#911
問題顯示了一些示例,其中ostream
被移動和/或交換,結果令人驚訝,而不是預期的。 我堅信,這些類型不應因此問題而公開移動或互換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.