语句基础
常见类别:表达式语句、空语句、复合语句
顺序语句与非顺序语句(引入跳转)
最基本的非顺序语句:goto
if(x) goto label;
label: ... 不能实现跨函数跳转;向前不能超过对象的初始化
容易造成逻辑混乱,少用
分支语句—if
else与最近的if相匹配
可以使用大括号来改变匹配逻辑
缩进和换行不起作用,因此通常引用大括号
if constexpr:区别 括号里是常量表达式。好处是可以在编译器确定走哪个分支。括号里面还可以加初始化语句if(int y = x*3;y>100)。y只在if else里面用
switch 语句
switch(整形或者可以转换成整型的) 加语句(多用复合语句)
可以使用case或者default标号。定义变量需要使用大括号
switch(x)
{
case 常量表达式(编译器可以执行的):
break; 可以跳出当前switch执行
default:缺省分支
}
[[fallthrough]];告诉编译器就需要fallthrough操作,可以不报错
与if相比的优劣
分支描述能力较弱
但是能在运行期节省时间
循环语句—while
while(条件)语句。直到条件不再满足;while条件部分不含额外初始化内容
循环语句—do-while
先执行do的内容
循环语句—for
正式语法:for(初始化语句;迭代化语句)语句
非正式语法:for(申明或表达式;声明或表达式;表达式)语句
处理逻辑:初始化语句首先执行-条件部分会被执行,结果为false就终止-否则执行循环体-迭代表达式会被求值,之后转向2
可以声明多个变量,只要他们有相同声明说明符序列
基于范围的for循环
本质是一个语法糖
for(int v : 数组)。调用数组的每个元素。实际运行时会被转换成正常的for循环的方式
循环语句——break/continue
含义
- break:导致外围的for、范围for、while或do-whiel循环或switch语句中止
- continue:用于跳过整个for、while或do-while循环体的剩余部分
注意这两者均不能用于多重嵌套循环,多重嵌套循环的跳转可考虑goto语句
int main()
{
int i = 2;
switch (i) {
case 1: std::cout << "1"; //<---- 可能会有警告:直落
case 2: std::cout << "2"; //从此 case 标号开始执行(+警告)
case 3: std::cout << "3"; //<---- 可能会有警告:直落
case 4: //<---- 可能会有警告:直落
case 5: std::cout << "45";
break; //终止后续语句的执行
case 6: std::cout << "6";
}
std::cout << '\n';
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 5; k++) { // break 只会影响此循环
if (k == 2) break;
std::cout << j << k << " ";
}
}
}
输出:
2345
00 01 10 11