C ++中变量定义操作的价值是什么?

时间:2015-11-03 13:23:19

标签: c++

在C ++中,变量定义成为一个操作,在此之前它们不在C中。进行了这一更改,以便您可以将循环变量定义放在for循环中,例如

for (int i = 0; i < N; i++) {
    printf("%d", i);
}

我的问题是变量定义操作的价值是什么,例如:在这种情况下,在这个例子中将执行什么条件语句:

if (int i = N) {
    printf("yes");
} else {
    printf("no");
}

4 个答案:

答案 0 :(得分:3)

如果初始化后的i值不等于零,则执行if子项。否则将执行else子语句。

更准确地说(C ++标准,6.4选择语句)

  

4作为a中初始化声明的条件的值   switch语句以外的语句是声明的值   变量上下文转换为bool

和(4.12布尔转换)

  

1算术,无范围枚举,指针或指针的prvalue   成员类型可以转换为bool类型的prvalue。零   转换value,null指针值或null成员指针值   为假;任何其他值都转换为true。

考虑一个简单的例子

#include <iostream>
#include <cstring>

//...

char nickname[] = "mgn1993";

if ( char *p = std::strchr( nickname, 'm' ) ) *p = 'M';

std::cout << nickname << std::endl;

在此代码片段中,变量p仅在if语句的子语句中需要。在外部范围内声明变量没有多大意义。

答案 1 :(得分:3)

您可以将其用作评估表达式的简写,并在if块中使用其返回值。 e.g。

if (int i = calculateSomething()) {
   // do something with i
}

相当于

int i = calculateSomething();
if (i) {
   // do something with i
}

除了i的范围仅限于if

答案 2 :(得分:1)

在提供的示例中,如果N具有非零值(在C ++中将评估为布尔值true),则输出将为“是”。给定示例没有实际价值,因为您可以非常轻松地用“N”替换整个赋值并实现相同的效果。

也许存在一些奇怪的边缘情况,我们非常需要使用并且能够在N非零时调整N中包含的值,并且我们同时需要绝对确保范围仅限于if - 陈述,但这似乎不太可能。

也就是说,在for循环中声明一个变量肯定有其优点。对于初学者来说,范围仅限于循环,一些编译器专门针对它进行优化,可能更清晰的代码等。

答案 3 :(得分:1)

变量定义的值是变量本身。

int i = 0; // is 0, and is therefore false
int j = 5; // is 5, and is therefore true

变量定义的范围是它适用的块。

所以:

if(int i = returnSomething()) {
    // This point is reached if returnSomething() did not return 0
    // i is defined in this block and can be used.
}
// i is not defined at that point, its scope being limited to the if block above