Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.150.112] |
|
Страницы: (14) « Первая ... 8 9 [10] 11 12 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#136
,
|
|
|
Ой, Киля - каким ты был - таким и остался!
|
Сообщ.
#137
,
|
|
|
shm, оно?
Цитата Initialization shall proceed in the following order: — First, and only for the constructor of the most derived class as described below, virtual base classes shall be initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes, where “left-to-right” is the order of appearance of the base class names in the derived class base-specifierlist. — Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list (regardless of the order of the mem-initializers). — Then, non-static data members shall be initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers). — Finally, the body of the constructor is executed. Добавлено censored, тут какие то обороты юзаются - фиг поймешь чо тут пишут, я интуитивно понимаю.. Добавлено Цитата KILLER @ Then, non-static data members shall be initialized in the order they were declared in the class definition Ну вот - оно ? |
Сообщ.
#138
,
|
|
|
Цитата — Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list (regardless of the order of the mem-initializers). — Then, non-static data members shall be initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers). Вот оно. Вопросы еще будут? Добавлено Цитата KILLER @ Ну вот - оно ? Да. А я разве не так сказал? |
Сообщ.
#139
,
|
|
|
Цитата shm @ Вот оно. Вопросы еще будут? Погоди, погоди. Во первых, что такое: Цитата shm @ mem-initializers Во вторых, то что ты процитировал - Как я понял: "Базовые классы должны быть инициализированы в том порядке в каком они определены в списке базового класса спецификатора(согласно порядку mem-initializers). Тут про базовые классы речь идет. Так что нифига подобного, будут вопросы. Добавлено Цитата shm @ Да. А я разве не так сказал? Нет, это я тебе так сказал, там пишут что: Цитата KILLER @ Then, non-static data members shall be initialized in the order they were declared in the class definition Нестатические члены класса должны быть инициализированы в том порядке, в котором они объявлены в классе. Или я не верно перевел? |
Сообщ.
#140
,
|
|
|
Цитата KILLER @ что такое Цитата In the definition of a constructor for a class, initializers for direct and virtual base subobjects and nonstatic data members can be specified by a ctor-initializer, which has the form ctor-initializer: : mem-initializer-list mem-initializer-list: mem-initializer mem-initializer , mem-initializer-list mem-initializer: mem-initializer-id ( expression-listopt ) mem-initializer-id: ::opt nested-name-specifieropt class-name identifier |
Сообщ.
#141
,
|
|
|
Т.е. другими словами "Нестатические члены класса должны быть инициализированы в том порядке, в каком ты их объявил в своем классе" - это именно то, что я тебе распедаливал 3 или 4 страницы.
|
Сообщ.
#142
,
|
|
|
Цитата KILLER @ это именно то, что я тебе распедаливал 3 или 4 страницы. Идем к моей первой цитате. Цитата shm @ ЕМНИП, объекты инициализируются в том порядке, в каком они объявлены в классе, при этом порядок их перечисления в конструкторе не имеет значения. Вот от этого все и грабли. |
Сообщ.
#143
,
|
|
|
Цитата shm @ In the definition of a constructor for a class, initializers for direct and virtual base subobjects and nonstatic data members can be specified by a ctor-initializer, which has the form ctor-initializer: : mem-initializer-list mem-initializer-list: mem-initializer mem-initializer , mem-initializer-list mem-initializer: mem-initializer-id ( expression-listopt ) mem-initializer-id: ::opt nested-name-specifieropt class-name identifier А, ну все я понял. Ну так mem-initializer - Это и есть инициализация мемберов класса, либо в теле конструктора, либо в списке инициализации. |
Сообщ.
#144
,
|
|
|
И почему ты тогда что-то гнал на мои примеры, раз тебе всегда было это ясно?
|
Сообщ.
#145
,
|
|
|
Цитата shm @ Идем к моей первой цитате. Идем к моей цитате, которая цитирует твою: Цитата KILLER @ Цитата ЕМНИП, объекты инициализируются в том порядке, в каком они объявлены в классе, при этом порядок их перечисления в конструкторе не имеет значения. В самом теле конструктора - да, не имеет. Я имею ввиду список инициализации, ЕМНИП там порядок объявления членов класса - важен. Добавлено Цитата shm @ И почему ты тогда что-то гнал на мои примеры, раз тебе всегда было это ясно? Потому что ты нарушаешь стандарт. Ты пытаешься инициализировать переменную тем, что еще не создано. |
Сообщ.
#146
,
|
|
|
Цитата KILLER @ Ты пытаешься инициализировать переменную тем, что еще не создано. Где? |
Сообщ.
#147
,
|
|
|
Сообщ.
#148
,
|
|
|
Пример процитируй с выделением этого места.
|
Сообщ.
#149
,
|
|
|
Цитата shm @ Пример процитируй с выделением этого места. Сорь, я не ту ссылку скопировал, третья вроде твоя ссылка: #include <iostream> using namespace std; class A { int b; int a; public: A(int val) : a(b), //! Вот тута ты инициализируешь член класса a, неициализированным членом b b(val) { } void print() { std::cout << a << ' ' << b; } }; int main() { A a(123); a.print(); return 0; } |
Сообщ.
#150
,
|
|
|
Тут - да. Это первый пример.
он же третий. Тогда почему ты не можешь внятно ответить про вывод? Киля просто признайся, что ты был не прав и все. Выглядишь сейчас смешно. Добавлено Цитата KILLER @ a(b), //! Вот тута ты инициализируешь член класса a, неициализированным членом b b(val) Киля, ты вбей в гугл трайнслейт то, что я выделил жирным шрифтом в моей первой цитате Стандарта. |