前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++核心准则ES.43: 避免在表达式中使用无定义的运算次序

C++核心准则ES.43: 避免在表达式中使用无定义的运算次序

作者头像
面向对象思考
发布2020-05-15 16:00:48
4650
发布2020-05-15 16:00:48
举报

ES.43: Avoid expressions with undefined order of evaluation

ES.43: 避免在表达式中使用无定义的运算次序

Reason(原因)

You have no idea what such code does. Portability. Even if it does something sensible for you, it may do something different on another compiler (e.g., the next release of your compiler) or with a different optimizer setting.

你无法知道这样的代码会做什么。可移植性。虽然可以带来某些实际的好处,但可能只要换一个编译器(例如编译器的下一个版本)或者修改了优化设定情况就会发生变化。

Note(注意)

C++17 tightens up the rules for the order of evaluation: left-to-right except right-to-left in assignments, and the order of evaluation of function arguments is unspecified.

C++17收紧了有关运算顺序的规则:除了从右向左的赋值之外都是从左向右计算,函数参数的求值次序是无定义的。

However, remember that your code may be compiled with a pre-C++17 compiler (e.g., through cut-and-paste) so don't be too clever.

但是,还是不要忘了,你的代码可能被C++17之前的编译器编译(例如通过剪切和粘贴),不要过于聪明。

Example(示例)

代码语言:javascript
复制
v[i] = ++i;   //  the result is undefined

A good rule of thumb is that you should not read a value twice in an expression where you write to it.

一条非常好的经验规则是:不要在一个需要对其写入的表达式中两次读取变量的值。

Enforcement(实施建议)

Can be detected by a good analyzer.

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

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es43-avoid-expressions-with-undefined-order-of-evaluation

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面向对象思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ES.43: Avoid expressions with undefined order of evaluation
  • Reason(原因)
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档