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语句以外的语句是声明的变量上下文转换为布尔
和(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循环中声明一个变量肯定有其优点。对于初学者来说,范围仅限于循环,一些编译器专门针对它进行优化,可能会产生更干净的代码等。
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- GCC本机矩阵运算库
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 位阵列上的快速AND运算
- 字符串中int的加法运算
- 算术运算的结果类似于:C浮点变量中的1/3
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- C++中变量定义运算的值是多少
- 浮点算术运算的精度是多少?
- 在现代x86_64 CPU上进行AVX/SSE幂运算需要多少时钟周期?