gpt4 book ai didi

c++ - 在不复制/移动元素的情况下初始化 std::array

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

#include <iostream>
#include <string>
#include <array>

class C {
private:
std::string a;
std::string b;
std::string c;
public:
C(std::string a_, std::string b_, std::string c_) : a{a_},b{b_},c{c_} {}
~C(){};
C(const C&) =delete;
C(const C&&) =delete;
const C& operator=(const C&) =delete;
const C& operator=(const C&&) =delete;
};

std::array<C,2> array = {C("","",""),C("","","")};

int main()
{}

这不会编译(带有 NDK 和 clang 的 Android Studio)并出现“调用已删除的 c 构造函数”错误。我知道我可以使用 std::vectoremplace_back() 直接在容器内构造一个元素,但在我的代码中我只想使用固定大小的容器和不可复制的/可移动物体进行优化。我可能在这里遗漏了一些基本知识,但是有没有一种方法可以初始化 std::array 而不必首先构造各个元素然后将它们复制到那里?

最佳答案

您可以使用大括号括起来的初始值设定项来代替临时的 c 对象:

std::array<c,2> array = {{{"",""},{"",""}}};

std::array<c,2> array{{{"",""},{"",""}}};

关于c++ - 在不复制/移动元素的情况下初始化 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42142099/

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