1 | |
Список инициализации в конструктор C++11. Зачем?13.11.2013, 13:07. Показов 4567. Ответов 40
Метки нет (Все метки)
Обьясните зачем в с++11 сделали возможность инициализировать данные м помощью списка {} ?
было вот так: C++ CO o(1, 2, 3); C++ CO o = { 1, 2, 3 }; // для чего?
0
|
13.11.2013, 13:07 | |
Ответы с готовыми решениями:
40
Конструктор. Наследование. Список инициализации Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? Конструктор инициализации, конструктор копирования, деструктор Конструктор инициализации |
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
13.11.2013, 13:18 | 4 |
castaway, а разницы?
0
|
13.11.2013, 13:29 | 6 |
А разница в том, что в первом случае - это Initializer lists
А во втором - это Uniform initialization (или extended initializer lists) Само название говорит о том что он расширенный.
1
|
13.11.2013, 13:33 [ТС] | 8 |
Первое что приходит на ум - это массивы. Типа так:
C++ int a[] = { 1, 2, 3 };
0
|
13.11.2013, 13:36 | 9 |
Эта типа для ленивых студентов оперирующих магическими числами...
Лично я хз когда это может пригодится. Если оперируешь std :: vector то ясное дело что он должен заполнятся в динамике, а не таки образом.
0
|
13.11.2013, 13:37 | 10 | |||||
programina, ты немного отстала от жизни
Так можно было делать еще в Си.
0
|
13.11.2013, 13:39 | 12 | |||||
По-твоему будет проще писать так:
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
||||||
13.11.2013, 13:41 | 13 | |||||
в рекомендациях саттера пример выглядел бы так
0
|
13.11.2013, 13:43 [ТС] | 15 |
С оператором = еще годится для обьекта, заточенного под массив, а без - нет (фор ми, как говорят англичане).
А что если обьект помимо массива еще содержит другие типы? Боюсь, что вскоре дождемся, что и операторы не надо будет перегружать, компилятор по какому-нибудь новому дополнительному иероглифу будет самостоятельно их перегружать...
0
|
13.11.2013, 13:48 | 17 |
Ну а где приведенный пример можно использовать кроме как для демонстрации либо теста.
К примеру хранить константы можно и в массиве, зачем для этого использовать вектор?
0
|
13.11.2013, 13:53 [ТС] | 18 |
прибавляет читаемости.
а по поводу: C++ CO o { 1, 2, 3 }; C++ CO <int> o { 1, 2, 3 };
0
|
13.11.2013, 14:01 | 19 |
Гадать? Т.е. сами не знаете какого типа элементы в классе/контейнере?
Если на то пошло, то при каком-то другом способе добавления элементов вы гадать не будете? Например при push_back по-вашему гадать не придется? CO <int> o { 1, 2, 3 }; - И чего же тут неудобночитабельного?
0
|
13.11.2013, 14:08 [ТС] | 20 |
Вот так хоть и занимает больше места, но сразу видно что к чему.
C++ vector <int> v = { 1, 2, 3 }; CO o(v); а если читаешь чужой код?
0
|
13.11.2013, 14:08 | |
13.11.2013, 14:08 | |
Помогаю со студенческими работами здесь
20
Реализовать конструктор инициализации Конструктор со списком инициализации членов Конструктор копирования при инициализации Определить конструктор для инициализации полей по умолчанию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |