В чем разница между ((int) a) и (int (a))? - PullRequest
7 голосов
/ 19 января 2020

В чем разница между ((int) a) и (int(a))?

Допустимо ли второе выражение в чистом "С"?

Ответы [ 2 ]

7 голосов
/ 19 января 2020

Нет разницы между ними в C ++. Однако C поддерживает только первую операцию приведения.

См. Этот пример из tutorial :

double x = 10.3;
int y;
y = (int) x;    // c-like cast notation 
y = int (x);    // functional notation
3 голосов
/ 19 января 2020

(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
...