(int) + 4*5;
Чому це можливо (додавання типу зі значенням) ? (спробували з g ++ та gcc.)
Я знаю, що це не має сенсу (і не має ніякого ефекту), але я хочу знати, чому це можливо.
(int) + 4*5;
Чому це можливо (додавання типу зі значенням) ? (спробували з g ++ та gcc.)
Я знаю, що це не має сенсу (і не має ніякого ефекту), але я хочу знати, чому це можливо.
cppinsights
який допомагає зрозуміти, як виглядає код з точки зору інтерфейсу компілятора. Він також має онлайн-версію, ви можете побачити, що він розповідає про ваш приклад (та сама `` дужка '', що і відповіді, які вам дали)
+(int)+ 4*5;
і, -(int)- 4*5;
і, -+-+-(int)-+-+- 4*5;
і менш поетично;
Відповіді:
+
Тут унарний +
оператор , а НЕ бінарний оператор додавання . Тут ніяких додатків не відбувається.
Крім того, синтаксис (int)
використовується для випуску тексту.
Ви можете перечитати це твердження як
(int) (+ 4) * 5;
який розбирається як
((int) (+ 4)) * (5);
що говорить,
+
оператор до цілочисельного значення константи 4
.int
5
Це схоже на те (int) (- 4) * (5);
, де використання одинарного оператора є більш звичним.
У вашому випадку одинарний +
і акторський склад int
- обидва непотрібні.
(+ 4)
не робить операндом+4
, це означає застосувати одинарний +
до операнда 4
, що дійсно є невдалим у випадку OP, але може спричинити цілочисельне просування або розпад масиву за інших обставин. Наприклад, char c = 0; sizeof +c == sizeof c
це, мабуть, помилково і sizeof +"a"
, мабуть, не 2.
42;
Це трактується як ((int)(+4)) * 5
. Тобто вираз +4
(одинарний плюс-оператор, застосований до літералу 4
), переданий для введення int
з використанням стилю C, а результат помножений на 5
.
(int)-4*5