在C ++中,变量定义成为一个操作,在此之前它们不在C中。进行了这一更改,以便您可以将循环变量定义放在for
循环中,例如
for (int i = 0; i < N; i++) {
printf("%d", i);
}
我的问题是变量定义操作的价值是什么,例如:在这种情况下,在这个例子中将执行什么条件语句:
if (int i = N) {
printf("yes");
} else {
printf("no");
}
答案 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