首页 > 后端开发 > C++ > 正文

在“for”循环初始化子句中声明多个变量

WBOY
发布: 2024-07-09 21:22:10
转载
1269人浏览过

在“for”循环初始化子句中声明多个变量

介绍

如你所知,C 和 C++ 中 for 语句的语法是:

    for ( init-clause ; 条件表达式 ; 迭代表达式 )

地点:

  • init-clause 用于初始化(准备)循环的开始;
  • condition-expr 在每次迭代之前进行评估:如果为零,则循环退出;
  • iteration-expr 在每次迭代后进行评估。

全部都是可选的;如果省略condition-expr,就好像它是1,因此:

for (;;) { // 永远
  // ...
}
登录后复制

永远循环(大概是通过break、return、goto、exit()、longjmp()、abort()之一退出,或者在C++中是throw)。

C++ 也有基于范围的 for 循环,但那是另一个故事了。

最初,init-clause只能是一个语句或表达式;从 C99 开始,它也可以是一个声明:

PhotoAid Image Upscaler
PhotoAid Image Upscaler

PhotoAid出品的免费在线AI图片放大工具

PhotoAid Image Upscaler 52
查看详情 PhotoAid Image Upscaler
for ( 无符号 i = 0; i < m; ++i ) {
登录后复制

这很好,因为它限制了循环体中声明的变量的范围。也可以声明多个变量:

for ( 无符号 i = 0, j = 0; i < m && j < n; ++i, ++j ) {
登录后复制

迭代表达式 可以使用逗号运算符来计算多个子表达式。 (实际上,任何表达式都可以使用逗号运算符来计算多个子表达式。)

但是如果你想声明多个类型不同的变量怎么办?你不能。相反,您被迫在循环外声明不同类型的变量:


size_t i = 0; for (node_t *p = list->head; p->data; ++i, p = p->next ) {



登录后复制
或者我是这么想的。正如我评论的:

即使是像 C 这样相对较小的语言,我仍然在学习新技术,尽管我已经使用 C 超过 35 年了。

事实证明,你

可以init-clause中声明多个类型不同的变量.

伎俩

诀窍是使用本地匿名结构:

for ( struct { size_t i; node_t *p; } 循环 = { 0, list->head };
      循环.p->数据; ++loop.i,loop.p =loop.p->下一个 ) {
登录后复制

当然,你可以将循环命名为你想要的任何名称; iter 或者 it 都是合理的选择。

当然,它看起来很奇怪,而且必须引用循环有点难看——但你可以做到。它可能更有用的一个地方是,如果循环是宏的一部分,那么丑陋的地方就会被隐藏起来。

但是仅仅因为你能做到,你就应该吗?这是有争议的。毕竟,在循环外声明不同类型的变量并不那么可怕。 这是与所有变量都限制在循环范围内的重要性的权衡。 在 C 语言中,这通常并不那么重要。 然而,在 C++ 中,如果至少一个循环变量属于具有析构函数的类型,并且它在循环终止后立即运行很重要,那么这可能证明使用结构体是合理的。 当然,C++ 具有可以替代使用的结构化绑定:


for ( auto [i, p] = std::make_tuple( 0, list->head ); p->数据; ++i, p = p->下一个 ) {

  
  
  结论
登录后复制

结构技巧当然没有那么重要,甚至可能不足以证明本文的存在。但我确实认为它很聪明,甚至在有限的情况下很有用,所以我认为它值得传递,因为我在超过 35 年的 C 编程生涯中从未遇到过它。

以上就是在“for”循环初始化子句中声明多个变量的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号