gpt4 book ai didi

具有显式构造函数的不可复制类型的 C++11 数组初始化

转载 作者:可可西里 更新时间:2023-11-01 18:39:59 26 4
gpt4 key购买 nike

我有一个不可复制的(第三方)类。我想初始化它们的数组。这是我最好的尝试:

#include <array>

class Thing
{
public:
explicit Thing(int) {}
Thing(const Thing&) = delete;
};

int main()
{
std::array<Thing, 1> things{{{100}}}; // error here
};

GCC 4.7.2 说:

error: converting to ‘std::array::value_type {aka Thing}’ from initializer list would use explicit constructor ‘Thing::Thing(int)’

好的,但这正是我想要的——使用显式构造函数。我该如何表达?如果我真的自己调用构造函数,那么我会收到一个关于复制构造函数被删除的错误。而且我不能使用 std::move() 因为 Thing 是不可移动的(我不能修改它)。

到目前为止,我发现的唯一替代方法是 https://stackoverflow.com/a/15962814/4323但这是不可取的,因为它是一堆额外的代码,而且我需要在我使用它的任何地方强制转换“存储”(或者保留一个单独的指向它的指针,这会增加我不想要的间接性)。

我想要一个解决方案,在实际使用 Things 时提供最佳性能,而不需要太多丑陋的样板。

最佳答案

再一次,C++17 的 guaranteed copy elision来救援:像 Thing{100} 这样的表达式不再创建对象,而只是指定如何其他对象(您的数组元素)将被创建。

关于具有显式构造函数的不可复制类型的 C++11 数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926967/

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