繁体   English   中英

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

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

在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语句之外的语句中作为初始化声明的条件的值是上下文转换为bool的声明变量的值

并且(4.12布尔转换)

1算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue。 零值,空指针值或空成员指针值转换为false; 任何其他值都转换为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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM