簡體   English   中英

為什么std :: ostream無法移動?

[英]Why can't std::ostream be moved?

顯然,流無法復制。 應該可以移動流。 根據27.9.1.11 [ofstream.cons]第4段,可以移動構造std::ofstream (對於std::ifstreamstd::fstreamstd::*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::ofstreamstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM