2012-02-19 3 views
1

Можно создать дубликат:
non-copyable objects and value initialization: g++ vs msvc
Value-initializing an automatic object?инициализации значение для автоматических переменных

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

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

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

int main() 
{ 
    int i = int(); 
} 
+3

Ваш 'i' от копирования инициализируется, а не значение инициализации. Только временное инициализируется значением. –

+0

Возможный дубликат [Value-initializing a auto object?] (Http://stackoverflow.com/questions/6298001/value-initializing-an-automatic-object) и http://stackoverflow.com/questions/2671532/non -copyable-objects-and-value-initialization-g-vs-msvc –

ответ

3

Термин value-initialization определен в 8,5 [dcl.init] пункт 16, 4 пули:

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

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

int i(); 

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

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

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

: is int i (6) инициализация значения и что будет int i (int()) означает –

+0

, почему это инициализация значений? T * p2 = новый T(); –

+0

Форма 'int i (6)' - _direct-initialization_ (8.5 [dcl.init] пункт 15). 'int i (int())' объявляет функцию с именем 'i', возвращающую' int', и принимает функцию без аргументов и возвращает 'int' в качестве аргумента. В 'T * p2 = new T()' 'новый объект инициализирован инициализированно, указатель' p2' инициализируется копией. –

Смежные вопросы