Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2

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

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

Студворк — интернет-сервис помощи студентам
Обьясните зачем в с++11 сделали возможность инициализировать данные м помощью списка {} ?
было вот так:
C++
CO o(1, 2, 3);
теперь можно так:
C++
CO o = { 1, 2, 3 }; //  для чего?
зачем усложнять язык?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.11.2013, 13:07
Ответы с готовыми решениями:

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

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

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

40
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
13.11.2013, 13:16
C++
1
CO o = { 1, 2, 3 }; //  для чего?
Так можно было и до этого.

Теперь можно так:
C++
1
CO o{ 1, 2, 3 };
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 13:18  [ТС]
Может быть, я чего то недопонимаю, но я вижу эту фичу как "сбоку припека" или "не пришей кобыле хвост"...
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
13.11.2013, 13:18
castaway, а разницы?
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 13:25  [ТС]
Цитата Сообщение от castaway;
Теперь можно так:
C++
1
CO o{ 1, 2, 3 };
хотела так написать, но почему то усомнилась.

Добавлено через 3 минуты
кстати без оператора = запись стала еще более бредовая.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
13.11.2013, 13:29
Цитата Сообщение от SatanaXIII Посмотреть сообщение
castaway, а разницы?
А разница в том, что в первом случае - это Initializer lists
А во втором - это Uniform initialization (или extended initializer lists)
Само название говорит о том что он расширенный.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
13.11.2013, 13:31
Цитата Сообщение от programina Посмотреть сообщение
Может быть, я чего то недопонимаю, но я вижу эту фичу как "сбоку припека" или "не пришей кобыле хвост"...
C++
1
std :: vector vec { 1 , 2 , 3 , 4 , 5 , 6 } ;
Так применение нагляднее?
1
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 13:33  [ТС]
Первое что приходит на ум - это массивы. Типа так:
C++
int a[] = { 1, 2, 3 };
Но ведь созданный обьект НЕ массив, хоть и содержит внутри себя массив. Выходит, что абстракция дошла до того, что конкретизирует себя. Сначала скрыли массив внутри обьекта, затем через запись всем своим видом показываем, что там где то внутри массив, типа эй, смотри тут есть массив. А что дальше? С auto такая же фигня!
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.11.2013, 13:36
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
std :: vector vec { 1 , 2 , 3 , 4 , 5 , 6 } ;
Эта типа для ленивых студентов оперирующих магическими числами...
Лично я хз когда это может пригодится.

Если оперируешь std :: vector то ясное дело что он должен заполнятся в динамике, а не таки образом.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
13.11.2013, 13:37
programina, ты немного отстала от жизни
Так можно было делать еще в Си.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
struct A {
    int a;
    int b;
    int c;
};
 
int main()
{
    struct A a = { 1, 2, 3 };
    printf( "%d, %d, %d\n", a.a, a.b, a.c );
    return 0;
}
Язык С++ унаследовал список инициализации от языка Си.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
13.11.2013, 13:39
Цитата Сообщение от Avazart Посмотреть сообщение
Эта типа для ленивых студентов оперирующих магическими числами...
так же как и любой другой сахирь
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
13.11.2013, 13:39
Цитата Сообщение от Avazart Посмотреть сообщение
Эта типа для ленивых студентов оперирующих магическими числами...
По-твоему будет проще писать так:
C++
1
2
3
4
5
6
7
std::vector vec;
vec.push_back( 1 );
vec.push_back( 2 );
vec.push_back( 3 );
vec.push_back( 4 );
vec.push_back( 5 );
vec.push_back( 6 );
?
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
13.11.2013, 13:41
в рекомендациях саттера пример выглядел бы так
C++
1
auto o = CO{ 1, 2, 3 };
я так понимаю, ввели это для унификации инициализации разных типов
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.11.2013, 13:42
Цитата Сообщение от castaway Посмотреть сообщение
По-твоему будет проще писать так:
Логичнее что задача будет решаться
C++
1
2
for(int x=0; x<N;  ++x)
    vec.push_back( f(x) );
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 13:43  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
std :: vector vec { 1 , 2 , 3 , 4 , 5 , 6 } ;
Так применение нагляднее?
С оператором = еще годится для обьекта, заточенного под массив, а без - нет (фор ми, как говорят англичане).

А что если обьект помимо массива еще содержит другие типы? Боюсь, что вскоре дождемся, что и операторы не надо будет перегружать, компилятор по какому-нибудь новому дополнительному иероглифу будет самостоятельно их перегружать...
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
13.11.2013, 13:46
Цитата Сообщение от Avazart Посмотреть сообщение
Логичнее что задача будет решаться
Чем логичнее? Лишний цикл логики не прибавляет.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.11.2013, 13:48
Цитата Сообщение от Croessmah Посмотреть сообщение
так же как и любой другой сахирь
Ну а где приведенный пример можно использовать кроме как для демонстрации либо теста.
К примеру хранить константы можно и в массиве, зачем для этого использовать вектор?
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 13:53  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Чем логичнее? Лишний цикл логики не прибавляет.
прибавляет читаемости.

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

CO <int> o { 1, 2, 3 }; - И чего же тут неудобночитабельного?
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2013, 14:08  [ТС]
Вот так хоть и занимает больше места, но сразу видно что к чему.
C++
vector <int> v = { 1, 2, 3 };
 
CO o(v);
Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Гадать? Т.е. сами не знаете какого типа элементы в классе/контейнере?
а если читаешь чужой код?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2013, 14:08
Помогаю со студенческими работами здесь

Конструктор инициализации
Как передать параметры конструктору, если объект класса определен как указатель? #include &lt;iostream&gt; using...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru