Что делает "новый автомобиль"?


Что это значит, когда я использую new auto? Рассмотрим выражение:

new auto(5)

Каков тип динамически выделяемого объекта? Какой тип указателя он возвращает?

2 21

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.