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

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

13.11.2013, 13:07. Показов 6155. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта 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 На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru