Fel*_*ara 20 c++ for-loop declaration language-lawyer
什么是声明的返回值/类型int i = 5?
为什么不编译这段代码:
#include <iostream>
void foo(void) {
std::cout << "Hello";
}
int main()
{
int i = 0;
for(foo(); (int i = 5)==5 ; ++i)std::cout << i;
}
Run Code Online (Sandbox Code Playgroud)
虽然这样做
#include <iostream>
void foo(void) {
std::cout << "Hello";
}
int main()
{
int i = 0;
for(foo(); int i = 5; ++i)std::cout << i;
}
Run Code Online (Sandbox Code Playgroud)
son*_*yao 25
在用于循环要求条件是要么表达式或声明:
条件 - 要么
- 一个上下文可转换为bool的表达式.在每次迭代之前计算此表达式,如果它生成false,则退出循环.
- 使用brace-or-equals初始化程序声明单个变量.在每次迭代之前评估初始化程序,如果声明的变量的值转换为false,则退出循环.
第一个代码不起作用,因为(int i = 5)==5它根本不是有效的表达式.(它也不是声明.)操作数operator==也应该是一个表达式,但它int i = 5是一个声明,而不是表达式.
第二个代码有效,因为int i = 5匹配条件的第二个有效情况; 使用等于初始值设定项的单个变量的声明.价值i将转换bool为判断; 这总是5,然后导致无限循环.
| 归档时间: |
|
| 查看次数: |
1533 次 |
| 最近记录: |