C++primerplus第五节循环
- 其他
- 2025-09-21 20:15:01

系列文章目录
C++ primer plus 第一节 步入C++-CSDN博客 C++ primer plus 第二节 hello world刨析-CSDN博客 C++ primer plus 第三节 数据处理-CSDN博客 C++ primer plus 第四节 复合类型-CSDN博客
文章目录
系列文章目录
文章目录
前言
一 for循环
总结
前言
由于作者看了后面的内容,觉得只要有点深入学过C语言就可以知道,所以这里就直接讲述一点,下一节直接讲述面向对象
一 for循环
1 for循环关键词 for循环后面跟了一个括号像一个函数的调用,但是for在C++里面已经定义为一个关键词了,所以编译器不会把他当作一个函数来看待,这还可以防止将函数名字命名为for
2 C++新增的语法规则
int x; int y; int z; x = y = z = 0;这种方法可以快速的将若干个变量设置为相同的值
3 表达式和语句 在我们之前学习C语言的时候基本都是见到的为明显的表达式
👉1 明显表达式 22+27这个一般都知道为49
👉2 不明显表达式 一般都是由两个值和一个运算符号组成 x = 20 这个就是表示20 maids = (cooks = 4) + 3; 这个maids为7 虽然这个不常见,但是我们也需要直到,接下来我们用vm来验证一下
我们可以看到这个(x=100)是可以给x赋值的,然后就是我们使用了ios_base::boolaplose来把这个0与1转换为bool类型买这个是可以设置的 👉3 有副作用的表达式 - 例子:++x + 15 - 解释:++x`表示将x的值加1,然后返回新的值。因此,++x + 15不仅计算了一个结果(x + 15),还改变了x的值(x被加1)这种改变就是副作用 4 副作用和顺序点 1 副作用和顺序点的定义: 副作用指的是在计算表达式时对某些东西(如存储在变量中的值)进行了修改 顺序点是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用都进行了评估,在C++中,语句中的分号就是一个顺序点,这个副作用一般我们见到的就是++或者-- 顺序点是有助于阐明后缀递增是何时进行,例如,看下面的代码
while(guest++<10) cout<< guest <<endl;这个是可以从x打印到10的循环
但是这种顺序点弄的表达式会有些许问题,就比如 y = (4 + x++) + (6 + x++) 这个表达式就是根据顺序点进行书写的 由于副作用的执行顺序不确定,这段代码可能产生未定义行为(Undefined Behavior) 例如:假设初始时 X = 1 - 如果编译器先计算 (4 + X++),此时X为1,结果为5,然后X变为2 - 接着计算 (6 + X++),此时X为2,结果为8,然后X变为3 - 最终结果为 5 + 8 = 13 但编译器也可以这样执行 - 先计算 (4 + X++) 和 (6 + X++),此时X为1,两个子表达式的结果分别为5和7 - 然后统一将X增加2(因为有两个X++),最终X为3 - 最终结果为 5 + 7 = 12 ✅理解 由于C++标准没有规定副作用的具体执行顺序,因此这种代码的输出是不确定的,属于未定义行为所以C++文档中就不再用顺序点这个东西了,由于++和--这个两个有确定性,不可具体的描述 5 前缀格式和后缀格式
#include<iostream> using namespace std; int main() { for (int i = 1;i <= 10;++i) { cout << i << " " ; } cout << endl; for (int i = 1;i <= 10;i++) { cout << i << " "; } cout << " "; return 0; }我们来看这个for循环步长表达式 这两个打印的都是一样的,但是,其实这两个还是有很大的差别的
👉(1)语义区别 - ++i(前缀递增):先将i的值增加1,然后返回增加后的值 - i++(后缀递增):先返回i的当前值,然后将i的值增加1 在`for`循环的迭代部分(如++i或i++),这种区别通常不会影响循环的逻辑,因为它们都被用来更新循环变量i,而循环条件是基于i的值来判断的
👉(2)效率区别 - ++i:直接返回增加后的值,没有额外的临时变量 - i++:需要返回i的当前值,然后增加i的值。这意味着编译器可能需要创建一个临时变量来存储i的当前值,从而导致一些额外的开销 在简单类型(如`int`)的情况下,这种开销通常可以被编译器优化掉,因此在实际运行中可能看不出效率差异。但在复杂类型(如自定义类或迭代器)的情况下,i++可能会比++i更慢,因为i++需要创建一个临时对象来存储当前值
6 逗号运算符号 👉用途一:用于for循环的步长表达式 for(int i = 1; i<n ; i++,j--) 这个就是逗号运算符号的用途,可以用于这个步长表达式 这个实际用的比较多的地方是把数组里面的值进行互换顺序,这个就比较常用
👉用途二:确保表达式的安全性 C++给这个运算符号添加了一个特性就是,它确保先计算第一个表达式,然后计算第二个表达式(换句 话说,逗号运算符是一个顺序点) 如i = 20,j = 2 * i先处理 i,再处理 j
👉用途三:逗号表达式的值是第二部分的值 cat = 17,240; 是被解释为`(cat = 17),240` 这个就是把cat存储17,后面的240不起任何作用 (cat = 17,240) 这个由于括号的优先级别最高,所以cat是240 根据用途二可以这么解释 ✅第一个表达式 步骤1:先计算cat = 17。这会将`cat`的值设置为17,并且cat = 17的值也是17 步骤2:然后计算240。240是一个独立的表达式,它的值是240
✅第二个表达式 步骤1:先计算cat = 17。这会将cat的值设置为17,并且cat = 17的值是17 步骤2:然后计算240。240是一个独立的表达式,它的值是240 结果:逗号表达式的值是240,因为逗号表达式的值是最后一个子表达式的值 最终结果:由于整个表达式被括号包围,它的值是240。因此,cat的值最终被设置为240
总结
这里的循环章节就没有全部写完了,博主看了一下后面,其实是一些不常用的,等到开发阶段遇到那些问题再来学也没问题,我们下一节直接启动类与面向对象 我们学习 for循环的关键词语 新增语法 明显表达式和不明显表达式 副作用表达式 副作用和顺序点的概念 前缀与后缀的效率在for循环与不同点 逗号运算符的作用
C++primerplus第五节循环由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++primerplus第五节循环”