Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Инициализация членов класса
Форум на CrossPlatform.RU > Разработка > С\С++
ViGOur
Что будет выведено в результате работы программы? (Как обычно, те кто себя уважают не пользуются IDE)
#include <iostream>

class A
{
public:
    A( int x): b(x), a(b*2)
    {
        std::cout << "a: " << a << " b: " << b << std::endl;
    }

private:
    int a;
    int b;
};


int main()
{
    A a(3);

    return 0;
}
Почему так?
Алексей1153
должно вывести

a:6 b:3


вопрос "почему так" - непонятный вопрос )
RR42
Там порядок важен, вроде. Надо проверить...
То есть, так нормально будет всё: A(int x): b(x), a(b*2)
А так нет: A(int x): a(b*2), b(x)
Но мне лень проверять, пойду спать.
Iron Bug
подозреваю, что a :0 b :3
потому что компилер тупо инициализирует переменные в порядке их нахождения в классе.
Алексей1153
кстати, да ))) Косяк приходит

Но я так никогда не делаю (только что инициализированную переменную использовать в качестве инициализатора в списке), поэтому не натыкался. Но, видимо, наткнулся бы, если б довелось такое применить )

Iron Bug, ну, в дебаге в "a" далеко не 0 )))
Iron Bug
Цитата(Алексей1153 @ 20.10.2011, 8:41) *
ну, в дебаге в "a" далеко не 0

ну, если компилятор не обнуляет переменные по умолчанию - то да, будет мусор. но большинство компиляторов всё же обнуляют. а так дебаг от релиза отличается только наличием дебажных символов и отсутствием оптимизации. ну и всякие ловушки на выход за пределы памяти могут устанавливаться, ассерты и т.п. но на порядок инициализации переменных это влиять не должно.
Влад
Выведет оно "a: [любой мусор] b: 3"
Потому что члены класса инициализируются в порядке их объявления в классе, независимо от порядка их перечисления в списке инициализации.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.