【发布时间】:2012-03-15 09:00:53
【问题描述】:
以下代码打印-10
int x = 10;
-x;
cout << -x << endl; // printf("%d\n", -x);
在 C 和 C++ 编译器中都有 (gcc 4.1.2)。我期待第二行出现编译器错误。
可能是基本的东西,但我不理解这种行为。有人可以解释一下吗?
谢谢
【问题讨论】:
-
-x;否定 x 并丢弃结果。与x+1;相同 -
请注意,在这种情况下,编译器可能会优化整个表达式,因为它没有效果。实际上,我希望任何体面的编译器都会警告您这种声明的无用性。
-
是的,当我给 -Wall 时,我收到警告:“语句无效”
-
啊,幸好你总是用
-Wall编译,嗯?也许这里有一个更大的教训...... -
注意:如果你把警告级别提高,编译器会发出警告。由于警告通常是代码中的逻辑错误(如上),您还可以让编译器将警告视为错误。试试:
g++ -Wall -Wextra -Werror <file>.cpp