std array



Автор Владимир Баклунов задал вопрос в разделе Другие языки и технологии

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

Ответ от Johnsilver[гуру]
потому что сама переменная типа класс сразу не создается, в памяти только его структура и методы.
а переменная создается уже в коде. используй конструктор для инициализации.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: C++ массив array в классе
спросили в STW
С++ / интеллектуалььные указатели / std::unique_ptr
unique_ptr<double[]> apa_ptr(new double(6));

Создаст массив только с одним
подробнее...
спросили в Duplus
что за номера в отелях: STUDIO ROOM/DBL, SUITE ROOM/DBL, STD ROOM SEA VIEW/DBL ?
Тип размещения
1 BDRM - апартаменты с одной спальней
1 Bedroom suite - апартаменты с
подробнее...
спросили в Hikaru no Go
посоветуйте аниме наподобие "сад изящных слов" не Макото Синкая
Toki wo Kakeru Shoujo / Девочка, покорившая время
Способность путешествовать во времени.. .
подробнее...

что такое региональная сеть
Региональная сеть - wide area network, WAN - крупная, нередко географически рассредоточенная сеть,
подробнее...
спросили в Заслуги
Всем воздастся по заслугам? Когда?
"Но, по упорству твоему и нераскаянному сердцу, ты сам себе собираешь гнев на день гнева и
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в C++ Книги о C++
Чем отличается коренным образом класс от структуры в c#
class C {
public int Value { get; set; }
public C(int value) {
Value = value;
}
подробнее...

что такое акуна матата?
полагаю,что Хаккуну-Матату каждый сам для себя определяет!!!!определи свой "стержень" по жизни и
подробнее...
спросили в Arrow Air
Перевод (Англ.)
1. Отделение интенсивной терапии.

2. A high dependency unit is an area in a hospital,
подробнее...
спросили в English Electric
Люди знающие английский язык, помогите, пожалуйста!!!
ABOUT ELECTRICITY:
Electricity is the set of physical phenomena associated with the presence
подробнее...
спросили в Интернет Grupo América
по русский-я тебя люблю по-англисский-I love you а по другим
Абхазский - Сара бара бзия бзой.

Аварский - Ди мун екъула.

Азербайджанский - Бен
подробнее...
спросили в Техника Авиация
АВИАЦИЯ. Что за самолет?
Это Sud SE-210 Caravelle III. Место фотографирования - Франция, Париж - Le Bourget, март 1981.
подробнее...
спросили в Fleetwood Mac P M T
Листинг на C++
#include <conio.h>
#include <iostream>

using namespace std;

void
подробнее...
спросили в Другое Fix price
краткое сочинение на англиском про браславские озёра
Braslau Lakes

Braslau Lakes is one of the seven Belarus National Parks. It is a unique
подробнее...
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*