C++中变量定义运算的值是多少

What is the value of a variable definition operation in C++?

本文关键字:多少 运算 变量 定义 C++      更新时间:2023-10-16

在C++中,变量定义变成了一个操作,直到那时它们才在C中出现。进行此更改是为了将循环变量定义放置在for循环中,例如

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

我的问题是变量定义运算的值是多少,例如,在这种情况下,在这个例子中会执行什么条件语句:

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

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

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

4条件的值,该条件是switch语句以外的语句是声明的变量上下文转换为布尔

和(4.12布尔转换)

1算术、无范围枚举、指针或指针的prvalueto成员类型可以转换为布尔类型的prvalue。零值、空指针值或空成员指针值被转换虚假;任何其他值都转换为true。

考虑一个简单的示例

#include <iostream>
#include <cstring>
//...
char nickname[] = "mgn1993";
if ( char *p = std::strchr( nickname, 'm' ) ) *p = 'M';
std::cout << nickname << std::endl;

在这个代码片段中,变量p只在if语句的子语句中需要。在外部范围中声明变量没有什么意义。

您可以将其用作计算表达式的简写,并在if块中使用其返回值。例如

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

相当于

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

除了i的范围被限制为if

变量定义的值就是变量本身。
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

在提供的示例中,如果N有一个非零值(在C++中计算为布尔值true),则输出为"yes"。给定的例子没有真正的价值,因为你可以很容易地用"N"代替整个赋值,并达到同样的效果。

也许有一些奇怪的边缘情况,我们非常需要使用并能够调整N中包含的值,仅当N为非零时,同时我们需要绝对确保范围仅限于if语句,但这似乎是一种不太可能的情况。

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