#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()
{}
это не скомпилирует (Android Studio с NDK и clang) с ошибкой «вызов для удаленных конструкторов c». Я знаю, что могу, например, используйте std::vector
и emplace_back()
для создания элемента непосредственно внутри контейнера, но в моем коде я хочу использовать только контейнеры фиксированного размера и не скопируемые/перемещаемые объекты для оптимизации. Мне, вероятно, не хватает базового элемента здесь, но нет ли способа инициализировать std::array
, не создав сначала отдельные элементы, а затем скопировав их там?инициализировать std :: массив без копирования/перемещения элементов
Кстати, вам не нужно ставить эти подчеркивания в именах параметров. 'C (std :: string a, std :: string b, std :: string c): a {a}, b {b}, c {c} {}' не имеет проблем с двусмысленностью и делает то, что вы ожидаете. – nwp