没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2010-07-26 10:28:41.000|阅读 491 次
概述:逗号操作符在程序开发中是一个非常常用的操作符。那么在C++语言中有没有都好操作符呢?如果有的话,又应当如何正确的使用C++逗号操作符呢?在这里我们将会给大家详细介绍一下相关概念。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
逗号操作符在程序开发中是一个非常常用的操作符。那么在C++语言中有没有都好操作符呢?如果有的话,又应当如何正确的使用C++逗号操作符呢?在这里我们将会给大家详细介绍一下相关概念。
不少C++ newbie都会问到这问题,大家对+-*/自然是认识的了,对其他的%!&|之类的也不觉得陌生,但是逗号操作符?可能有一半的人会说不清楚它到底是干啥的。
其实,我们是经常会用到逗号操作符的,但是并不是所有代码里出现的逗号都是逗号操作符。
让我们先从一个类的示例代码开始:
class mynum
{ public: mynum(double ndb,...)
{ //init with arguments }
}; class someclass
{ someclass(): num(3,4) ,a(0) ,b(0) ,c(15)
{ int i,j; i=1,2; //int x=1,2; for(;b<10;++b,--c)
{ ++a; }
} mynum num; int a; int b,c;
};
在这段代码里,逗号在5,13-16,18-20,27行都出现了。
现在先让我们来看看C++逗号操作符是啥意思:
一个包含逗号的表达式首先计算逗号左边的表达式,然后计算逗号右边的表达式;整个表达式的结果是逗号右边表达式的值。
然后我们看看上面的代码:
第5行是在mynum类的构造函数里出现的逗号,只是用来区分开第一个double类型的参数和后面的可变参数。这是一个特例,如果在构造mynum对象的时候,本来是要传入3.4作为第一个参数的,结果不小心把小数点变成了逗号的话,3.4就变成了两个参数3和4——比如在第13行的情况。类似这样的情况编译器不会报错,程序也能运行,但是mynum类里的成员变量可能就因为构造函数传入的变量值变化而导致程序运行结果完全不一致了。这两个逗号都不是逗号操作符了。
第14,15,16行的逗号,也不是逗号操作符。这三个逗号只是用来间隔构造函数的成员变量初始化列表。
第18行的int i,j;是大家都很常用的变量声明的语句,逗号在这里,也只是起了一个间隔变量声明的作用,也不是逗号运算符。
第19行的逗号,如果不认识C++逗号操作符的话,一定会认为这肯定是写错了!其实这正是逗号操作符了。让我们看看,经过i=1,2;这个语句后,i 的值应该是多少呢?按照之前逗号操作符的定义,我们好像可以很轻松的得出i=2。然而,这个答案是错的!你在得出错误答案的时候,忽略了一个重要的因素——运算符优先级!由于=号的优先级更高,所以i=1,2;这个语句相当于(i=1),2; ,如果要得到期望的2,我们应该这样来写i=(1,2);。下面的代码可以验证这个说法的(注意第3行是无意义代码,但是可不是错误代码哦!)
int i,j; i=1,2; 3,4; j=(1,2); printf("%d\n%d\n",i,j);
继续看第一份代码里的第20行,这是一个for循环代码。这里的逗号,也是逗号操作符哦。其实for循环也是逗号操作符经常出现的地方哦。for循环里只能写一个表达式,而逗号表达式这个时候就可以让你完成两个甚至多个表达式的计算。比如“for(;b<10;++b,--c)”,++b和--c就会在每次循环中都被执行到。
第27行就无须多说了。也就是一普通的变量声明语句,这里的逗号也不是C++逗号操作符的。
总的来说,逗号操作符并不是一个非常常用的操作符,它只在某些特定的上下文环境里会有很好的效果,同时,在编码中还要非常小心错误的输入的逗号引发错误的问题。
比如逗号和括号就会引发一些潜在问题,如果在编码的时候一疏忽就会产生一些难以追查的隐藏bug,只有遵守一些既定的编码规范,养成良好严谨的编码习惯,才有助于避免一些诸如此类的问题出现。看看下面的代码:
int myadd(int i,int j,int k) { return i+j+k; } int myadd(int i,int j) { return i+j; } int main() { for(int x=0;x<9;++x) { printf("%d",myadd((2,3),4)); } }
由于在第15行,错误的添加了括号(在实际编码中这样的情况太常见了),结果导致整个的输出全错了!因为(2,3)这个C++逗号操作符表达式的返回值是3,所以15行相当于是myadd(3,4)了!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@wqylolg.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@wqylolg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢