Унарный + оператор на инт &

У меня есть следующее заявление, и оно компилируется:

static unsigned char CMD[5] = {0x10,0x03,0x04,0x05,0x06};

int Class::functionA(int *buflen)
{
    ...
    int length = sizeof(CMD); + *buflen; // compiler should cry! why not?
    ...
}

Почему я не получаю ошибку компилятора?

3 ответа

Решение
+ *buflen;

Действительное заявление о + оператор на int&Это в основном шумиха. Это так же, как если бы вы написали это:

int i = 5;
+i; // noop

Смотрите здесь для чего одинарный operator+ на самом деле делает с целыми числами, и вот что вы можете сделать с ним практически.

Потому что это не так, просто заявление без эффекта.

Если вы скомпилируете (gcc/g++) с флагом -Wall, вы увидите.

Я думаю, из заголовка этого вопроса "После точки с запятой другая команда и она компилируется", что вы думаете, что может быть только одна команда / оператор на строку?

Как вы заметили, это неверно. C++ и C являются языками свободной формы (это означает, что вы можете расположить символы любым удобным для вас способом). Точка с запятой - это просто терминатор оператора.

Вы можете написать foo();bar(); или же

foo();
bar();

Обе (и более) договоренности полностью в порядке. Кстати, это особенность, а не ошибка. Некоторые языки (Python, ранний Fortran) не имеют этого свойства.

Как правильно отметили другие, ваше конкретное утверждение - это бездействие, утверждение без какого-либо эффекта. Некоторые компиляторы могут предупредить вас об этом, но ни один компилятор не предупредит вас о нескольких операторах в одной строке.

Другие вопросы по тегам