Что делает "новый автомобиль"?
Что это значит, когда я использую 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.