int和amp;上的一元+运算符

时间:2012-02-07 10:22:23

标签: c++ unary-operator

我有以下声明并编译:

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 个答案:

答案 0 :(得分:8)

+ *buflen;

+上的一元int&运算符的有效应用,它基本上是一个noop。就像你写这个一样:

int i = 5;
+i; // noop

请参阅here了解一元operator+对整数的实际作用,以及here您可以用它实际做些什么。

答案 1 :(得分:4)

因为它没有错,只是一个没有效果的陈述。

如果使用标志-Wall编译(gcc / g ++),你会看到。

答案 2 :(得分:4)

我想从这个问题的标题“分号后另一个命令并编译”你认为每行只能有一个命令/语句?

正如您所注意到的,这是错误的。 C ++和C是free-form languages(这意味着您可以以您认为合适的任何方式排列符号)。分号只是一个语句终止符。

您可以写foo();bar();

foo();
bar();

两种(和更多)安排都完全没问题。顺便说一下,这是一个功能,而不是一个bug。有些语言(Python,早期的Fortran)没有这个属性。

正如其他人正确指出的那样,您的具体陈述是无操作的,没有任何影响的陈述。有些编译器可能会警告你 - 但是没有编译器会在一行上警告你多个语句。