gpt4 book ai didi

c++ - 自动和复制省略

转载 作者:太空狗 更新时间:2023-10-29 20:39:11 25 4
gpt4 key购买 nike

当使用 auto 并提交到特定类型时,复制省略的规则究竟是什么? (参见:GotW - Almost always auto)。

根据我的理解,移动/复制构造函数需要可访问,即使它通常不被使用。但是下面例子中的 unique_ptrfstream 有什么区别呢? (与 noexcept 有关?)

#include <memory>
#include <fstream>

int main()
{
auto f = std::fstream{"foo.bar"};
auto i = std::unique_ptr<int>{new int};

return 0;
}


// main.cc:6:10: error: call to implicitly-deleted copy constructor of 'std::basic_fstream<char>'
// auto f = std::fstream{"foo.bar"};
// ^ ~~~~~~~~~~~~~~~~~~~~

最佳答案

我猜你使用的是 libstdc++。它目前在这方面不符合标准,即 iostream 虽然应该有,但还没有移动构造函数。它将在版本 5 中修复:

Runtime Library (libstdc++)

...

Full support for C++11, including the following new features:

...

movable and swappable iostream classes;

来自 version 5 changelog

关于c++ - 自动和复制省略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28709951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com