网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C++为什么不要让执行结果受函数参数的求值次序影响​

这篇文章主要讲解了“C++为什么不要让执行结果受函数参数的求值次序影响”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++为什么不要让执行结果受函数参数的求值次序影响”吧!

成都创新互联是一家专注于成都做网站、成都网站设计与策划设计,平罗网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:平罗等地区。平罗做网站价格咨询:13518219792

ES.44: 不要让执行结果受函数参数的求值次序影响

Reason(原因)

Because that order is unspecified.

因为函数参数的求值次序是无定义的。

Note(注意)

C++17 tightens up the rules for the order of evaluation, but the order of evaluation of function arguments is still unspecified.

C++17收紧了运算次序规则,但是函数参数的求值次序依然是无定义的。

Example(示例)

int i = 0;
f(++i, ++i);

调用的结果很可能是f(0,1)或者f(1,0),但是不知道会是哪一个。技术上,这个行为是无定义的。在C++17中,这段代码不会是一个无定义的行为,但是依然没有明确那个参数先求值。

Example(示例)

Overloaded operators can lead to order of evaluation problems:

重载的运算符可能引入计算次序的问题。

f1()->m(f2());          // m(f1(), f2())
cout << f1() << f2();   // operator<<(operator<<(cout, f1()), f2())

In C++17, these examples work as expected (left to right) and assignments are evaluated right to left (just as ='s binding is right-to-left)

在C++17中,这些代码示例可以像期待的那样执行(从左向右),同时赋值会从右向左计算(就像赋值运算符=绑定了从右向左计算次序)

f1() = f2();    // undefined behavior in C++14; in C++17, f2() is evaluated before f1()

Enforcement(实施建议)

Can be detected by a good analyzer.

这个问题可以被实现良好的代码解析器检出。

感谢各位的阅读,以上就是“C++为什么不要让执行结果受函数参数的求值次序影响”的内容了,经过本文的学习后,相信大家对C++为什么不要让执行结果受函数参数的求值次序影响这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网站名称:C++为什么不要让执行结果受函数参数的求值次序影响​
分享网址:http://bjjierui.cn/article/psdgei.html

其他资讯