为什么这样可以:
if(int i = 1) {
}
...而以下产生错误?
if((int i = 1)) {
}
在g ++(4.4.5)下,后者给出:
test.cpp:7:错误:在'int'之前预期的primary-expression
之前
test.cpp:7:错误:预期')'在'int'之前 test.cpp:9:错误:预期')'在'else'之前 test.cpp:13:错误:在'}'标记之前预期的primary-expression
test.cpp:13:错误:预期';'在'}'标记
顺便说一句,我问的原因是因为这个答案:Seeing what class an object is
我正试图找到一种方法来使条件更具可读性。通常,我更喜欢,例如:
if((x = y) != 0) {
到
if(x = y) {
...因为它更具可读性并且使编译器“评论”沉默,这表明我可能使用了错误的运算符。如果我使用声明作为条件,它不会产生警告,但可读性似乎仍然受到影响。
答案 0 :(得分:4)
这是因为C ++标准,6.4 p1。
选择语句选择几个控制流之一。
选择语句:
if ( condition ) statement
if ( condition ) statement else statement
switch ( condition ) statement
条件:
expression
type-specifier-seq declarator = assignment-expression
答案 1 :(得分:3)
这不是作业。这是一个宣言。您可以将声明放在其他地方作为条件,如下面的
if(int i = value) ...;
for(...; int i = value; ...) ...;
switch(int i = value) ...;
while(int i = value) ...;
这是一种很少使用的形式,但它不是那里指定的表达式。你在那里做了什么声明一个变量i
你可以在身体中使用
// fire if get() returns non-null
if(weapon *w = get()) {
w->fire();
}
围绕这样的声明不允许使用括号。我认为这没有任何意义。