(type_name)identifier
(или, более конкретно, (type_name)cast_expression
(6.5.4) ) является приведением в стиле C. (int(a))
синтаксически неверен в C, если a
не является типом. Тогда он может быть частью приведения к функции, принимающей тип a
и возвращающей int
, что будет синтаксически допустимым, но семантически неверным приведением, поэтому также бесполезным. int(a);
в C будет объявлением, эквивалентным int a;
.
C ++ поддерживает синтаксис int(a)
для приведений (имя типа должно быть одним словом; оно не работает, например, с , unsigned long(a)
) на том основании, что int
(имя типа) затем становится чем-то вроде типа с параметризованным конструктором (хотя даже это в C ++ сгруппировано вместе с типами C, которые являются устаревшими способ приведения и более мелкие / видимые static_cast/reinterpret_cast/const_cast
предпочтения).
Синтаксис C ++ представляется весьма интересным, поскольку он работает (C ++):
typedef int type_name;
type_name (a); //a declaration
a=0;
printf("%d\n", type_name(a)); //type_name(a) is a cast expr here