gpt4 book ai didi

c++ - 用 `auto` 初始化需要复制构造函数?

转载 作者:行者123 更新时间:2023-11-30 03:56:19 25 4
gpt4 key购买 nike

<分区>

下面的初始化,

auto p = std::make_pair(std::stringstream{}, "Hello World!");

使用 libc++ 编译并与 clang++ 一起正常工作。

使用 libstdc++ 编译它,但是,clang++g++ 都会出错,

error: use of deleted function 'std::basic_stringstream<char>::basic_stringstream(const std::basic_stringstream<char>&)'

来自g++,和

error: call to implicitly-deleted copy constructor of 'std::basic_stringstream<char>'

来自 clang++ 使用 libstdc++

我对标准的理解是,这种声明加初始化应该不涉及拷贝构造函数。我错了吗? libc++ 应该允许这种初始化吗?还是 libstdc++ 不正确?

编辑:在您的友好回复之后,我知道这是 gcc 中的一个错误,直到 v5 才会修复。无论是使用复制初始化还是直接初始化,调用make_pair 总是需要移动或复制构造函数,这在当前有问题的gcc 下会出错。所以我的问题是如何轻松地重写我的代码来绕过这个错误。我有一个类层次结构,其中有一个类型为 stringstream 的成员。删除它会导致太多的头痛。使用 unique_ptr 是唯一的出路吗?

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