Не должно быть синтаксическая ошибка "= +"?

Недавно я пытался использовать следующий код:

int number = 4;
number += other_variable;//2
...
printf("Number:%d\n",number);//-->6

но у меня была ошибка ввода, и вместо этого у меня есть этот код:

int number = 4;
number =+ other_variable;//2
...
printf("Number:%d\n",number);//-->2

По-видимому, это скомпилировано с gcc 4.7.3 и gcc 4.4.3, и результат был как обычный оператор присваивания. вопрос: не должна ли это синтаксическая ошибка?

Ответ 1

Нет - это анализируется как:

number = +other_variable;

то есть. у вас есть назначение и оператор унарного+. Вы читаете его как =+, но это два отдельных оператора, = и +.

Ответ 2

Нет, это просто нулевой оператор.

number = +other_variable;
number = 0 + other_variable;

В дополнение к этим операциям, которые отрицают:

number =- other_variable;
number = -other_variable;
number = 0 - other_variable;

Ответ 3

Нет, это два отдельных оператора.

number = (+other_variable);

Унарный + оператор, применяемый к базовому типу данных, насколько мне известно, не делает ничего, кроме возврата исходного значения. Однако он может быть перегружен.

Это аналог унарного оператора, который инвертирует знак.

number = (-other_variable);

Ответ 4

Нет, это не синтаксическая ошибка.

То же самое похожее на a=-b; - вы можете сделать a=+b; тоже. Он не имеет никакого эффекта для этого (для встроенных типов, объекты, которые вы определили operator+(), поскольку, конечно, могли бы сделать что-то напуганное здесь), но это вполне допустимый C-код.