其他分享
首页 > 其他分享> > c – 自动和复制省略

c – 自动和复制省略

作者:互联网

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

根据我的理解,移动/复制构造函数必须是可访问的,即使它通常不被使用.但是接下来的例子中unique_ptr和fstream之间的区别是什么? (与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.在这方面,它目前不符合标准,即虽然它们应该具有移动构造器,但它们还没有移动构造器.它将在版本5中修复:

Runtime Library (libstdc++)

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

movable and swappable iostream classes;

  

version 5 changelog

标签:copy-elision,c,c11,auto
来源: https://codeday.me/bug/20190830/1765531.html