170 похожих чатов

В каких ситуациях мне нужно использовать std::string s{}; вместо std::string

s; ?

29 ответов

26 просмотров

Можешь всегда использовать. Хуже не станет

Ramil-Rizvanov Автор вопроса
Слава
Можешь всегда использовать. Хуже не станет

то есть {} стильно модно молодежно, без них депрекейтед?

Ramil Rizvanov
то есть {} стильно модно молодежно, без них депрек...

Почему депрекейтед? Как хочешь так и делай

Ramil-Rizvanov Автор вопроса
Слава
Почему депрекейтед? Как хочешь так и делай

добавил же С++11 такую возможность, зачем?

Ramil Rizvanov
добавил же С++11 такую возможность, зачем?

Для того чтобы в шаблонном коде все инициализировать. Для тривиальных типов {} инициализирует нулем, а без них мусором

Ramil-Rizvanov Автор вопроса
Слава
Для того чтобы в шаблонном коде все инициализирова...

чтоб обеспечить в шаблоне что там мусора не будет?

Ramil Rizvanov
чтоб обеспечить в шаблоне что там мусора не будет?

Что у тебя переменная инициализирована была

Ramil-Rizvanov Автор вопроса
Ramil Rizvanov
ну т.е. нули , не мусор, в шаблоне

Условно template<class T> void foo() { T t; } Если так, то при Т=int, то в t мусор, а если {}, то ноль

Ramil-Rizvanov Автор вопроса
Ramil-Rizvanov Автор вопроса
Слава
Условно template<class T> void foo() { T t; } Е...

правильно ли я понял, что при инициализации struct A { int a; }; в поле A::a мы получим мусор? т.е. default initialization? не value initialization?

Ramil-Rizvanov Автор вопроса
Дмитрий Ш
а откуда там взяться данным?

не откуда, от того и вопрос, default initializer или value initializer

Ramil-Rizvanov Автор вопроса
Denis P
Зависит от того где объект

как он сам был инициализирован?

Ramil-Rizvanov Автор вопроса
Denis P
Ну вот так

если A a;. то a.a default initalized если A a{};. то a.a value initalized верно?

Ramil Rizvanov
правильно ли я понял, что при инициализации struct...

фатальный недостаток вашего примера в том, что A это не просто class type — это агрегатный тип, инициализация которых вынесена в отдельную главу стандарта. A::a в A a{} будет инициализирован согласно dcl.init#aggr-5.2 если представить, что он просто class type, тогда согласно dcl.init#general-9.1.1 он будет default-initialized, что означает вызов конструктора продолжая гипотетический пример смотрим, что делает неявный конструктор по умолчанию: class.default.ctor#4.sentence-2 и class.base.init#9.3, то есть снова default initialization. замечу, что мы и так внутри неявного конструктора по умолчанию, который вызван как часть default-initialization из предыдущего абзаца, что значит, что эта механика рекурсивна, пока для data member'а не написан инициализатор (либо в определении класса, либо в member initializer list в конструкторе)

Ramil-Rizvanov Автор вопроса
Vlad
фатальный недостаток вашего примера в том, что A э...

преклоняюсь перед вашим умением лавировать в стандарте. получается поле класса int без default initializer и без member initialization list будет рандомным мусором?

Ramil Rizvanov
преклоняюсь перед вашим умением лавировать в станд...

если по-простому (забыть об агрегатах, например), то да

Ramil-Rizvanov Автор вопроса
Ramil Rizvanov
в агрегатах value initialization?

веселее http://eel.is/c++draft/dcl.init#aggr-5.2

Ramil Rizvanov
= {} ?

да, только всегда copy-initialization я не уверен, что это всегда правда для = {}

Ramil-Rizvanov Автор вопроса
Vlad
да, только всегда copy-initialization я не уверен,...

судя по стандарту именно = {}, интересно почему именно копирование... чтобы иногда конструктор копирования отрабатывался?

Ramil Rizvanov
судя по стандарту именно = {}, интересно почему им...

я лишь цитировал тот пункт из инициализации агрегатов. почему он так написан сказать не могу, но намерение явно в том, что в этом случае работает copy-initialization и так, будто инициализатор это = {}. а не, например, что инициализация работает как будто там просто = {} (что потребует определения, какой вид инициализации использовать)

Ramil-Rizvanov Автор вопроса
Vlad
фатальный недостаток вашего примера в том, что A э...

на cppreference накопал If the number of initializer clauses is less than the number of members and bases (since C++17) or initializer list is completely empty, the remaining members and bases (since C++17) are initialized by their default member initializers, if provided in the class definition, and otherwise (since C++14) copy-initialized from empty lists, in accordance with the usual list-initialization rules (which performs value-initialization for non-class types and non-aggregate classes with default constructors, and aggregate initialization for aggregates). If a member of a reference type is one of these remaining members, the program is ill-formed.

Ramil Rizvanov
на cppreference накопал If the number of initiali...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта