s; ?
                  
                  
                
Можешь всегда использовать. Хуже не станет
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  то есть {} стильно модно молодежно, без них депрекейтед?
Почему депрекейтед? Как хочешь так и делай
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  добавил же С++11 такую возможность, зачем?
Для того чтобы в шаблонном коде все инициализировать. Для тривиальных типов {} инициализирует нулем, а без них мусором
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  чтоб обеспечить в шаблоне что там мусора не будет?
Что у тебя переменная инициализирована была
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  ну т.е. нули , не мусор, в шаблоне
Условно template<class T> void foo() { T t; } Если так, то при Т=int, то в t мусор, а если {}, то ноль
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  понял, спасибо
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  правильно ли я понял, что при инициализации struct A { int a; }; в поле A::a мы получим мусор? т.е. default initialization? не value initialization?
а откуда там взяться данным?
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  не откуда, от того и вопрос, default initializer или value initializer
Зависит от того где объект
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  как он сам был инициализирован?
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  если A a;. то a.a default initalized если A a{};. то a.a value initalized верно?
фатальный недостаток вашего примера в том, что 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
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  преклоняюсь перед вашим умением лавировать в стандарте. получается поле класса int без default initializer и без member initialization list будет рандомным мусором?
если по-простому (забыть об агрегатах, например), то да
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  в агрегатах value initialization?
веселее http://eel.is/c++draft/dcl.init#aggr-5.2
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  да, только всегда copy-initialization я не уверен, что это всегда правда для = {}
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  судя по стандарту именно = {}, интересно почему именно копирование... чтобы иногда конструктор копирования отрабатывался?
я лишь цитировал тот пункт из инициализации агрегатов. почему он так написан сказать не могу, но намерение явно в том, что в этом случае работает copy-initialization и так, будто инициализатор это = {}. а не, например, что инициализация работает как будто там просто = {} (что потребует определения, какой вид инициализации использовать)
 Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ramil
                          Rizvanov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  на 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.
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Обсуждают сегодня