Что делает "новый автомобиль"?
Что это значит, когда я использую new auto
? Рассмотрим выражение:
new auto(5)
Каков тип динамически выделяемого объекта? Какой тип указателя он возвращает?
2 ответа:
В этом контексте
auto(5)
разрешается вint(5)
.Вы выделяете новый
int
из кучи, инициализируемый в5
.(Итак, он возвращается.
int *
)Цитируя находчивый ответ Энди Проула, с разрешения:
Согласно пункту 5.3.4 / 2 стандарта C++11:
Если
auto
спецификатор типа появляется в спецификаторе типа seq new-type-id или type-id new-expression , то новое выражение должно содержать новый инициализатор вида( assignment-expression )
Выделенный тип выводится из new-initializer следующим образом: Пусть
e
является присваивающим выражением в new-initializer и T быть new-type-id или type-id new-expression , то выделенный тип является типом выводится для переменнойx
в изобретенном объявлении (7.1.6.4):T x(e);
[ пример :
new auto(1); // allocated type is int auto x = new auto(’a’); // allocated type is char, x is of type char*
-конец примера ]
Согласно пункту 5.3.4 / 2 стандарта C++11:
Если
auto
спецификатор типа появляется в спецификаторе типа-seq нового типа-id или типа-id нового выражения , то новое выражение должно содержать новый инициализатор вида( assignment-expression )
Выделенный тип выводится из new-инициализатора следующим образом: пусть
e
является присваивающим выражением в новый инициализатор и T быть new-type-id или type-id из new-expression , то выделенный тип является типом выводится для переменнойx
в изобретенном объявлении (7.1.6.4):T x(e);
[ пример :
new auto(1); // allocated type is int auto x = new auto(’a’); // allocated type is char, x is of type char*
-конец примера ]
Следовательно, тип выделенного объекта идентичен выведенному типу выдуманного объявления:
auto x(5)
То есть
int
.