Рассмотрим вопрос SO, опубликованный для Java Как работает оператор +++?

Ну я это понимаю

  1. Нет такого оператора, как '+++', это просто инкремент после исправления, за которым следует инфиксное добавление
  2. Это преступление против читабельности

Что я хочу знать (просто из любопытства) ЕСЛИ

+++ это просто инкремент после исправления, за которым следует инфиксное добавление , а не +++ это просто инфиксное добавление, за которым следует префиксный инкремент или его неопределенное поведение < / сильный>.

Считайте, что я тестировал следующую программу

#include <iostream>
int main() {
    int x = 1;
    std::cout<< x+++1 << std::endl;
    std::cout<< 1+++x << std::endl;
}

В VC ++, gcc и g ++, и все они соответствуют тому факту, что

'+++' its just a post-fix increment followed by an infix add

И нет

'+++' its just an infix add followed by a prefix increment
3
Abhijit 13 Мар 2013 в 14:06
Один действительно простой способ избежать проблем - это написать ++ + или + ++, чтобы указать, чего вы действительно хотите. Даже если компилятор знает угловые случаи, ваши товарищи-программисты могут не знать. Зачем их черт возьми?
 – 
Bo Persson
13 Мар 2013 в 14:17
Причина голосования "против"? Может быть, потому, что мне было любопытно, и хотя я не был котом, это меня убило?
 – 
Abhijit
13 Мар 2013 в 14:18
Я думал, что -1 было очевидным. Вопрос бесполезен, потому что в ответе нет практического смысла. Точно так же, как нет смысла использовать Все эти вопросы о ++ x + x ++ и т. д..
 – 
Bo Persson
13 Мар 2013 в 14:26
1
+1, чтобы компенсировать отрицательный голос. Вопросы, которые возникают из любопытства, могут быть бесполезны напрямую, но они помогают людям понять основные процессы в языке / компиляторе, которые часто могут иметь, по крайней мере, столько же хороших эффектов в целом, чем практический вопрос типа «как мне это сделать» . Кроме того, Абхиджит прямо упомянул в вопросе, что использование +++ - плохой стиль; люди, читающие не попытаются его использовать, поэтому нет никаких отрицательных эффектов, поэтому нет необходимости в голосовании против.
 – 
chm
13 Мар 2013 в 23:52

1 ответ

Лучший ответ

Да, правило максимального пережевывания говорит нам, что +++ анализируется как ++ + (не постфиксный, за которым следует инфикс, а постфикс, за которым следует оператор +), что также оказывает

1+++x  <----> 1++ + x

Незаконно, потому что 1 не является lvalue.

15
0x499602D2 13 Мар 2013 в 16:07