C++中如何使用逗号操作符,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联一直在为企业提供服务,多年的磨炼,使我们在创意设计,网络营销推广到技术研发拥有了开发经验。我们擅长倾听企业需求,挖掘用户对产品需求服务价值,为企业制作有用的创意设计体验。核心团队拥有超过十多年以上行业经验,涵盖创意,策化,开发等专业领域,公司涉及领域有基础互联网服务服务器主机托管、重庆App定制开发、手机移动建站、网页设计、网络整合营销。
其实,我们是经常会用到逗号操作符的,但是并不是所有代码里出现的逗号都是逗号操作符。
让我们先从一个类的示例代码开始:
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; };
现在先让我们来看看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)了!
看完上述内容,你们掌握C++中如何使用逗号操作符的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!