Вопрос:

инициализация значения для автоматических переменных

c++ value-initialization

241 просмотра

1 ответ

751 Репутация автора

Возможный Дубликат:
не копируемые объекты и инициализация значения: g ++ vs msvc
Инициализация значения автоматического объекта?

Рассмотрим следующее утверждение:

В действительности невозможно инициализировать значение для автоматического объекта.

Это утверждение верно? Я не вижу проблем в этом:

int main()
{
    int i = int();
}
Автор: T.J. Источник Размещён: 19.02.2012 04:24

Ответы (1)


3 плюса

126090 Репутация автора

Решение

Этот термин value-initializationопределен в п. 16 пункта 8.5 [dcl.init]:

Если инициализатором является (), объект инициализируется значением.

То есть инициализация значения автоматической переменной будет выглядеть так:

int i();

Тем не менее, это объявление функции с именем ireturn int. Таким образом, невозможно инициализировать значение автоматически. В вашем примере временная переменная инициализируется значением, а автоматическая переменная инициализируется копией. Вы можете убедиться, что это действительно требует, чтобы конструктор копирования был доступен, используя тестовый класс, у которого нет доступного конструктора копирования:

class noncopyable {
    noncopyable(noncopyable const&);
public:
    noncopyable();
};

int main() {
    noncopyable i = noncopyable(); // ERROR: not copyable
}

С C ++ 11 : int i{};делает работу (см. Также это ).

Автор: Dietmar Kühl Размещён: 19.02.2012 04:54
Вопросы из категории :
32x32