Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249

Инициализация POD-структуры C++11

10.09.2015, 10:08. Показов 2588. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Можно ли так проинициализировать массив, чтоб не создавать конструктор ?

C++
1
2
3
4
5
6
struct A
{
    int a = 0;
    void* ptr = nullptr;
    char data[16] = {0};
};
2. Почему если есть
C++
1
2
3
4
5
6
struct S
{
   int a = 0;
   int b = 0;
   int c = 0;
};
То теперь нельзя инициализовать так?
C++
1
2
3
S s1 = {0};
S s2 = {10, 3};
S s3 = {10, 5, 0};
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2015, 10:08
Ответы с готовыми решениями:

Инициализация структуры
Есть структура struct msg quest; struct msg { double clientId; size_t cash; char message; };

Инициализация членов структуры
Здравствуйте. Имеется код: #include <iostream> struct Pizza { char name; double diametr; double weidth; };

Структуры, инициализация переменных
Возможно ли как-либо реализовать такой концепт: Если что-то там, то структура содержит N переменных, если НЕ что-то там, то содержит M? ...

14
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.09.2015, 11:41
Цитата Сообщение от xbarmaglot Посмотреть сообщение
То теперь нельзя инициализовать так?
С флагом с++1y компилируется: http://melpon.org/wandbox/perm... 1v7eVBVfSP
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
10.09.2015, 11:57
Потому, что двойная инициализация происходила бы.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.09.2015, 12:54
Угу, в С++14 можно.

If there are fewer initializer-clauses in the list than there are members in the aggregate, then each member
not explicitly initialized shall be initialized from its brace-or-equal-initializer or, if there is no brace-or-equal-
initializer, from an empty initializer list (8.5.4).
По факту в стандарте С++11 так же есть это, в том же параграфе, 8.5.1

Добавлено через 7 минут
Не. Не прав. Тут другой кейс должен быть, это уже не агрегат же по идее. Чуть позже напишу должно компилироваться или нет...

Добавлено через 12 минут
Во. Со стековерфлоу:
(C++11 only, until C++14) A class that uses brace-or-equal-initializer violates constraints for an aggregate type.
Так что да, в С++11 это не агрегат, а в С++14 агрегат и такая инициализация - норма. http://stackoverflow.com/quest... nitializer и туда же http://stackoverflow.com/quest... itializers
1
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
10.09.2015, 14:54  [ТС]
жаль, будем ждать копилятора.

А как с моим первым вопросом ?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.09.2015, 15:06
xbarmaglot, Можно. Это инициализация массива просто-напросто. Все элементы будут 0.
Пример: http://coliru.stacked-crooked.... d3054796d7
0
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
10.09.2015, 16:25  [ТС]
почему-то мой C++11 не хочет так делать
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
08.10.2015, 19:45
Цитата Сообщение от xbarmaglot Посмотреть сообщение
почему-то мой C++11 не хочет так делать
xbarmaglot, выставь флаг
-std=c++14
всего и делов.
Или, ещё лучше, поставь clang - там вообще можно из будущего стандарта С++17 фишки юзать вот с таким флагом:
-std=c++1z
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
08.10.2015, 19:51
Цитата Сообщение от ForEveR Посмотреть сообщение
такая инициализация - норма
Только вот это уже не POD будет.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
08.10.2015, 20:50
Цитата Сообщение от DrOffset Посмотреть сообщение
Только вот это уже не POD будет.
А почему?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
08.10.2015, 21:05
Цитата Сообщение от gru74ik Посмотреть сообщение
А почему?
Потому что POD - это когда
9/10
A POD struct is a non-union class that is both a trivial class and a standard-layout class
а trivial class - это класс, который имеет trivial constructor (в числе других признаков). Это когда
12.1
A default constructor is trivial if it is not user-provided
Когда мы написали in-class initialization, ты мы заставили компилятор сделать нам особый default конструктор. Т.е. получили, хоть и неявно, user-provided конструктор.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.10.2015, 21:54
Так pod типы это не только int,char,bool, ... + float, double, long double, так еще и trivial классы(тривиальные - что за слово вообще? Как не крути в С++ все классы в конце концов приходят к int,char, ..... . Имелось ввиду классы состоящих только в фундоментальных типов?) и что за standard-layout class
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
08.10.2015, 22:28
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Так pod типы это не только
Структуры в стиле С, union в стиле С, enum (не enum class).
Arithmetic types (3.9.1), enumeration types, pointer types, pointer to member types (3.9.2), std::nullptr_t,
and cv-qualified versions of these types (3.9.3) are collectively called scalar types. Scalar types, POD classes
(Clause 9), arrays of such types and cv-qualified versions of these types (3.9.3) are collectively called POD
types. Cv-unqualified scalar types, trivially copyable class types (Clause 9), arrays of such types, and nonvolatile
const-qualified versions of these types (3.9.3) are collectively called trivially copyable types. Scalar types, trivial
class types (Clause 9), arrays of such types and cv-qualified versions of these types (3.9.3) are
collectively called trivial types. Scalar types, standard-layout class types (Clause 9), arrays of such types
and cv-qualified versions of these types (3.9.3) are collectively called standard-layout types.
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
тривиальные - что за слово вообще?
тривиальный - по-русски - простой.

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Имелось ввиду классы состоящих только в фундоментальных типов?
Да. Но не только. Есть еще признаки. Например, отсутсвие виртуальных функций, разделения области видимости, деструктора, пользовательских конструкторов. Если что-то из этого в классе есть, то он уже не trivial.
Кроме того, на практике проверить можно вот этими метафункциями:
http://www.cplusplus.com/refer... s_trivial/
http://www.cplusplus.com/refer... ts/is_pod/
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.10.2015, 22:59
Цитата Сообщение от DrOffset Посмотреть сообщение
разделения области видимости
это про nested классы или namespace в классе ?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
08.10.2015, 23:10
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
то про nested классы или namespace в классе ?
Это про public\private\protected.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2015, 23:10
Помогаю со студенческими работами здесь

Инициализация полей структуры из файла
Помогите, пожалуйста, разобраться с файлами. Имеется такая структура: enum Pos {director = 1, manager, bookkeeper, secretary,...

Инициализация структуры через точку
Доброго юзаю MVS2012 Проблема есть структура struct ST { int a; int b; };

Инициализация всех полей структуры
Всем привет. struct sFoo { int a; char b; struct {

Инициализация текстовых полей структуры
День добрый форумчане, поделитесь мудростью, пишу задание, но в ходе выполнения(в принципе как и всегда) возникла проблема, struct.name,...

Инициализация переменной структуры, определенной в классе
Добрый день. Имеется такой код: #include<iostream> class Qwe { int cl; struct Bla {


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru