Термин 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
}
Ваш 'i' от копирования инициализируется, а не значение инициализации. Только временное инициализируется значением. –
Возможный дубликат [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 –