Как инициализировать значение указателя типа * с помощью синтаксиса, подобного Type ()?
Вы не можете. Синтаксис T()
определен в 5.2.3 / 1,2 (C ++ 03, немного другая формулировка в C ++ 11 FDIS). В частности, второй абзац гласит:
Выражение T (), где T - это спецификатор простого типа (7.1.5.2) для не полного массива типа объекта или типа void (возможно, cv-квалифицированного), создает значение r указанного типа, который инициализирован значением (8.5);
Это означает, что int()
создаст значение типа int и value-initialize it. Теперь проблема в том, что int*
- это не простой спецификатор типа, а сложный спецификатор типа. Определение спецификатора простого типа в грамматике:
simple-type-specifier:
::opt nested-name-specifieropt type-name
::opt nested-name-specifier template template-id
char
wchar_t
bool
short
int
long
signed
unsigned
float
double
void
Имя типа определяется как:
type-name:
class-name
enum-name
typedef-name
Это то, что заставляет предложенные решения работать. Создание typedef (напрямую или через шаблон) создает имя типа (третий тип), которое можно использовать как спецификатор простого типа (первый тип).