Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Список инициализации в конструктор C++11. Зачем? - C++

13.11.2013, 13:07. Просмотров 2126. Ответов 40
Метки нет (Все метки)

Обьясните зачем в с++11 сделали возможность инициализировать данные м помощью списка {} ?
было вот так:
C++
CO o(1, 2, 3);
теперь можно так:
C++
CO o = { 1, 2, 3 }; //  для чего?
зачем усложнять язык?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 13:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Список инициализации в конструктор C++11. Зачем? (C++):

Конструктор. Наследование. Список инициализации - C++
Если есть класс, который наследует другой класс, то как задать для конструктора список инициализации? class CKub { private: ...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Конструктор инициализации - C++
Как передать параметры конструктору, если объект класса определен как указатель? #include <iostream> using namespace...

Реализовать конструктор инициализации - C++
Во всех заданиях необходимо реализовать конструктор инициализации (один или несколько) и конструктор без аргументов. Указанные в задании...

Конструктор копирования при инициализации - C++
При инициализации одного объекта через другой вызывается конструктор копирования, под динамическую область памяти выделяется своя...

40
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2013, 13:46 #16
Цитата Сообщение от Avazart Посмотреть сообщение
Логичнее что задача будет решаться
Чем логичнее? Лишний цикл логики не прибавляет.
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.11.2013, 13:48 #17
Цитата Сообщение от Croessmah Посмотреть сообщение
так же как и любой другой сахирь
Ну а где приведенный пример можно использовать кроме как для демонстрации либо теста.
К примеру хранить константы можно и в массиве, зачем для этого использовать вектор?
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 13:53  [ТС] #18
Цитата Сообщение от castaway Посмотреть сообщение
Чем логичнее? Лишний цикл логики не прибавляет.
прибавляет читаемости.

а по поводу:
C++
CO o { 1, 2, 3 };
еще надо угадать с типом этих 1,2,3 , иначе без применения шаблона не обойтись. Никогда не поверю, что запись типа:
C++
CO <int> o { 1, 2, 3 };
может быть удобочитаемой. Не в этой вселенной.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2013, 14:01 #19
Цитата Сообщение от programina Посмотреть сообщение
еще надо угадать с типом этих 1,2,3
Гадать? Т.е. сами не знаете какого типа элементы в классе/контейнере?
Если на то пошло, то при каком-то другом способе добавления элементов вы гадать не будете? Например при push_back по-вашему гадать не придется?

CO <int> o { 1, 2, 3 }; - И чего же тут неудобночитабельного?
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 14:08  [ТС] #20
Вот так хоть и занимает больше места, но сразу видно что к чему.
C++
vector <int> v = { 1, 2, 3 };
 
CO o(v);
Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Гадать? Т.е. сами не знаете какого типа элементы в классе/контейнере?
а если читаешь чужой код?
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.11.2013, 14:09 #21
Цитата Сообщение от programina Посмотреть сообщение
а если читаешь чужой код?
Должен сначала ознакомится с используемыми классами.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 14:13  [ТС] #22
Гадать? Т.е. сами не знаете какого типа элементы в
классе/контейнере?
а кто говорит, что контейнер?
Вангую, найдутся такие, которые будут передавать список в конструктор обьекта неконтейнерного типа, вот и разбирайся после них в коде.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2013, 14:13 #23
Цитата Сообщение от Avazart Посмотреть сообщение
Должен сначала ознакомится с используемыми классами.
Совершенно верно.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.11.2013, 14:16 #24
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Недавно натыкался на статейку как раз по теме
http://herbsutter.com/2013/05/09/gotw-1-solution/
3
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 14:19  [ТС] #25
Цитата Сообщение от Avazart Посмотреть сообщение
Должен сначала ознакомится с используемыми классами.
если других дел нет, то можно и классы полистать. Особенно занимательно, когда пользуешься не навороченной IDE с автопоиском по всему проекту, а текстовым редактором.
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.11.2013, 14:27 #26
Цитата Сообщение от programina Посмотреть сообщение
а текстовым редактором.
Ну если под Windows, то Notepad++ справляется с этой задачей нормально.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
13.11.2013, 14:34 #27
Цитата Сообщение от programina Посмотреть сообщение
Вот так хоть и занимает больше места, но сразу видно что к чему.

C++
1
2
vector <int> v = { 1, 2, 3 };
CO o(v);
Учитывая, что такая инициализация вектора невозможна без списка инициализации...
0
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 866
Регистрация: 27.09.2012
Сообщений: 18,891
Записей в блоге: 3
Завершенные тесты: 1
13.11.2013, 14:40 #28
Так же стоит упомянуть о сужении типов (narrowing)
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.11.2013, 14:48 #29
Цитата Сообщение от ForEveR Посмотреть сообщение
Учитывая, что такая инициализация вектора невозможна без списка инициализации...
C++
1
2
3
const int n= 3;
int a[n] = { 1, 2, 3 };
CO o(a,a+n);
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
13.11.2013, 14:49 #30
Avazart, Я прекрасно знаю, что есть инициализация вектора через итераторы. А так же есть http://www.boost.org/doc/libs/1_54_0/libs/assign/doc/index.html, однако куда удобнее инициализировать через список инициализации (да и тем более, зачем мне этот массив-то тут нужен в области видимости?)
0
13.11.2013, 14:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 14:49
Привет! Вот еще темы с ответами:

Конструктор со списком инициализации членов - C++
1) Какой смысл применять синтаксис конструктора со списком инициализации членов class A{ A():_name(0),_balance( 0.0 ), _acct_nmbr( 0...

Конструктор со списком инициализации: найти ошибку в коде - C++
здравствуйте, есть вот такой кусок шаблонного класса и инициализирующий конструктор этого класса: std::allocator&lt;T&gt; data; typename...

Определить конструктор для инициализации полей по умолчанию - C++
У меня такое задание по лабу, кстати она самая сложная и последняя: дана структура: struct Student { char *LastName; ...

Копирующий конструктор в списке инициализации членов класса - C++
Добрый день. Сегодня обнаружил кое-что для себя странное и непонятное. В общем-то смотрим код: #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru