Автор Владимир Баклунов задал вопрос в разделе Другие языки и технологии
C++ массив array в классе и получил лучший ответ
Ответ от Николай Веселуха[гуру]
У массива это не список инициализации!
std::vector<int> v({1,2,3,4,5}); // good!
std::array<int,5> a({1,2,3,4,5}); // error!
Класс array<T> относится к агрегатам. Он не имеет пользовательских конструкторов, закрытых или защищённых не статических членов, базовых классов и виртуальных функций. То есть всё открыто и всё доступно!
Внутри класса создаётся статический массив в стиле Си, он будет расположен в стеке со всеми вытекающими отсюда последствиями.
Конструктор по умолчанию не создаёт пустой контейнер, так как количество элементов заранее известно, оно постоянно и неизменно во время выполнения программы.
Это то, что касается подчёркивания красным в среде Visual Studio 2013 попытке инициализировать списком объект контейнера в классе. Но вовсе не значит, что для vector код валиден.... Совсем даже наоборот! Компилятор выдаст ошибку компиляции: C2797 ссылка для любой попытки инициализировать список в списке инициализаторов члена или нестатического члена данных, как для массива, так и для вектора и чего угодно.
Ну и для наглядности код, который покажет и докажет внутреннюю структуру класса array<T>
#include <iostream>
#include <vector>
#include <array>
using namespace std;
struct test {
vector<int> v{};
array<int, 5> a{};
};
int main() {
test t;
for (auto &e : t.a) cout << e << ' '; // что и требовалось доказать!
cout << endl;
for (auto &e : t.v) cout << e << ' ';
cin.sync();
cin.get();
}
Владимир Баклунов
Мыслитель
(5117)
маил убрал то что было в скобках int, 10
потому что сама переменная типа класс сразу не создается, в памяти только его структура и методы.
а переменная создается уже в коде. используй конструктор для инициализации.
С++ / интеллектуалььные указатели / std::unique_ptr
unique_ptr<double[]> apa_ptr(new double(6));
Создаст массив только с одним
подробнее...
что за номера в отелях: STUDIO ROOM/DBL, SUITE ROOM/DBL, STD ROOM SEA VIEW/DBL ?
Тип размещения
1 BDRM - апартаменты с одной спальней
1 Bedroom suite - апартаменты с
подробнее...
посоветуйте аниме наподобие "сад изящных слов" не Макото Синкая
Toki wo Kakeru Shoujo / Девочка, покорившая время
Способность путешествовать во времени.. .
подробнее...
что такое региональная сеть
Региональная сеть - wide area network, WAN - крупная, нередко географически рассредоточенная сеть,
подробнее...
Всем воздастся по заслугам? Когда?
"Но, по упорству твоему и нераскаянному сердцу, ты сам себе собираешь гнев на день гнева и
подробнее...
Ребят, не подскажите кричалок фанов Барсы против Реал Мадрида? Хотя бы на русском...ну или на испанском?
Барселона:
Нimne del Barca
Tot el camp
Es un clam
Som la gent blaugrana
Tant
подробнее...
Чем отличается коренным образом класс от структуры в c#
class C {
public int Value { get; set; }
public C(int value) {
Value = value;
}
подробнее...
что такое акуна матата?
полагаю,что Хаккуну-Матату каждый сам для себя определяет!!!!определи свой "стержень" по жизни и
подробнее...
Перевод (Англ.)
1. Отделение интенсивной терапии.
2. A high dependency unit is an area in a hospital,
подробнее...
Люди знающие английский язык, помогите, пожалуйста!!!
ABOUT ELECTRICITY:
Electricity is the set of physical phenomena associated with the presence
подробнее...
Кто знает как на c++ разделить строку на слова и сделать их как элементы массива?
#include <string>
#include <vector>
#include <sstream>
#include
подробнее...
по русский-я тебя люблю по-англисский-I love you а по другим
Абхазский - Сара бара бзия бзой.
Аварский - Ди мун екъула.
Азербайджанский - Бен
подробнее...
АВИАЦИЯ. Что за самолет?
Это Sud SE-210 Caravelle III. Место фотографирования - Франция, Париж - Le Bourget, март 1981.
подробнее...
Листинг на C++
#include <conio.h>
#include <iostream>
using namespace std;
void
подробнее...
краткое сочинение на англиском про браславские озёра
Braslau Lakes
Braslau Lakes is one of the seven Belarus National Parks. It is a unique
подробнее...