为什么std :: ostream无法移动?

迪特玛·库尔(DietmarKühl)

显然,流无法复制。应该可以移动流。根据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,例如,有一个工厂函数创建一个std::ofstream,一个std::ostringstream根据URN,或其他一些流传递作为参数不起作用。std::ostream(嗯,std::basic_ostream实际上是类模板)具有protected根据27.7.3.1 [ostream]move构造函数。

为什么std::ostream本身不能移动?

霍华德·辛南特

最初它们是可移动的。事实证明,这是我的设计缺陷,并由Alberto Ganesh Barbati发现:

http://cplusplus.github.io/LWG/lwg-defects.html#911

问题显示了一些ostream移动和/或交换位置的示例,结果令人惊讶,而不是预期的。我坚信这些类型不应被此问题公开公开或互换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么std :: ostream无法移动?

来自分类Dev

std :: ostream如何移动?

来自分类Dev

如何移动std :: ostream?

来自分类Dev

为什么std :: lock_guard无法移动?

来自分类Dev

为什么`std :: common_type_t <std :: ostream&,std :: ostream&>`等于`std :: ostream`而不是`std :: ostream&`?

来自分类Dev

为什么我不能移动std :: ofstream?

来自分类Dev

为什么std :: copy无法向量化?

来自分类Dev

为什么std :: copy无法向量化?

来自分类Dev

为什么std :: cout无法正确显示?

来自分类Dev

vector <int>的ostream_iterator无法编译。为什么?

来自分类Dev

为什么删除的移动语义会导致std :: vector问题?

来自分类Dev

为什么std :: vector的元素需要移动构造函数?

来自分类Dev

为什么std :: exception没有移动构造函数?

来自分类Dev

为什么std :: vector的元素需要移动构造函数?

来自分类Dev

为什么我不能在std :: sets之间移动std :: move std :: unique_ptrs?

来自分类Dev

为什么 std::bind 不能与 std::filesystem::path 和 std::ostream 一起工作?

来自分类Dev

为什么std :: forward无法自己推断模板参数?

来自分类Dev

为什么递归中的std :: ofstream无法按预期工作?

来自分类Dev

为什么std :: stol无法使用科学计数法?

来自分类Dev

为什么`std :: async`无法选择正确的重载?

来自分类Dev

为什么我的std :: ref无法正常工作?

来自分类Dev

为什么std :: set_difference无法删除重复项?

来自分类Dev

为什么std :: swap无法在模板项目上使用?

来自分类Dev

为什么std :: forward无法自己推断模板参数?

来自分类Dev

为什么Clang无法优化std :: initializer_list?

来自分类Dev

为什么std :: nothrow无法按gcc(4.9)的预期工作?

来自分类Dev

为什么在 GCC 上无法调用 std::package_task

来自分类Dev

为什么需要std :: move才能调用std :: vector的移动分配运算符

来自分类Dev

为什么std :: basic_ostream同时具有free和member运算符<<?

Related 相关文章

  1. 1

    为什么std :: ostream无法移动?

  2. 2

    std :: ostream如何移动?

  3. 3

    如何移动std :: ostream?

  4. 4

    为什么std :: lock_guard无法移动?

  5. 5

    为什么`std :: common_type_t <std :: ostream&,std :: ostream&>`等于`std :: ostream`而不是`std :: ostream&`?

  6. 6

    为什么我不能移动std :: ofstream?

  7. 7

    为什么std :: copy无法向量化?

  8. 8

    为什么std :: copy无法向量化?

  9. 9

    为什么std :: cout无法正确显示?

  10. 10

    vector <int>的ostream_iterator无法编译。为什么?

  11. 11

    为什么删除的移动语义会导致std :: vector问题?

  12. 12

    为什么std :: vector的元素需要移动构造函数?

  13. 13

    为什么std :: exception没有移动构造函数?

  14. 14

    为什么std :: vector的元素需要移动构造函数?

  15. 15

    为什么我不能在std :: sets之间移动std :: move std :: unique_ptrs?

  16. 16

    为什么 std::bind 不能与 std::filesystem::path 和 std::ostream 一起工作?

  17. 17

    为什么std :: forward无法自己推断模板参数?

  18. 18

    为什么递归中的std :: ofstream无法按预期工作?

  19. 19

    为什么std :: stol无法使用科学计数法?

  20. 20

    为什么`std :: async`无法选择正确的重载?

  21. 21

    为什么我的std :: ref无法正常工作?

  22. 22

    为什么std :: set_difference无法删除重复项?

  23. 23

    为什么std :: swap无法在模板项目上使用?

  24. 24

    为什么std :: forward无法自己推断模板参数?

  25. 25

    为什么Clang无法优化std :: initializer_list?

  26. 26

    为什么std :: nothrow无法按gcc(4.9)的预期工作?

  27. 27

    为什么在 GCC 上无法调用 std::package_task

  28. 28

    为什么需要std :: move才能调用std :: vector的移动分配运算符

  29. 29

    为什么std :: basic_ostream同时具有free和member运算符<<?

热门标签

归档