#include <stdio.h> volatile int i; int main() { int c; for (i = 0; i < 3; i++) { c = i &&& i; printf("%d\n", c); } return 0; }
使用编译的上述程序的输出gcc是
gcc
0 1 1
使用-Wallor-Waddress选项,gcc发出警告:
-Wall
-Waddress
warning: the address of 鈥榠鈥� will always evaluate as 鈥榯rue鈥� [-Waddress]
c在上述计划中如何评估?
c
它是c = i && (&i);,第二部分是多余的,因为&i永远不会评估为false。
c = i && (&i);
&i
false
对于用户定义的类型,您实际上可以重载 unary operator &,它可能会有所不同,但这仍然是一个 非常糟糕的主意 。
operator &
如果你 打开警告 ,你会得到类似的东西:
警告:“榠”的地址将始终评估为“榯rue”