首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MISRA C++ 2008中,有人知道规则5-0-3中出现的特定概念Cvalue表达式吗?

在MISRA C++ 2008中,有人知道规则5-0-3中出现的特定概念Cvalue表达式吗?
EN

Stack Overflow用户
提问于 2016-12-21 06:14:48
回答 1查看 2.2K关注 0票数 3

从Cvalue的概念来看,我意识到

“不应进行进一步转换的表达式,无论是隐式的还是显式的,都称为cvalue表达式。”

但是用这个规则给出的例子。

代码语言:javascript
运行
复制
s32 = static_cast < int32_t > ( s8 ) + s8; // Example 2 - Compliant
s32 = s32 + s8; // Example 3 - Compliant

显然,正确的加法表达式在这里隐式和显式转换。这条规则表明他们是顺从的。我认为这与cvalue的概念相冲突。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-21 07:17:44

在第57页末尾,MISRA Cpp 2008:

类似情况,除非如下所列:

  • 。。。
  • 其他未列出的表达式不是cvalue,具有操作的基础类型。

阅读该段之后的长列表,没有任何东西可以应用于s8

然后,s8不是cvalue,它具有操作的基础类型,在您的示例中,它的底层类型是int32_t。晋升到int32_t并没有违反规则。

5-0-3的全部要点是要确保所有操作都以相同的底层类型执行。

代码语言:javascript
运行
复制
int32_t s32;
int8_t s8;
s32 = static_cast < int32_t > ( s8 ) + s8; // Example 2 - Compliant
s32 = s32 + s8; // Example 3 - Compliant

在上述示例中,+是使用底层int32_t类型执行的(到目前为止,大多数intint32_tint16_t),返回底层的int32_t类型,然后分配给int32_t变量,从而符合MISRA。

在本例中:

代码语言:javascript
运行
复制
int32_t s32;
int8_t s8;
s32 = s8 + s8;

由于加法操作符是用int类型执行的,所以它不符合要求,结果将转换为int32_t,这与int不一样,因此不符合要求。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41256292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档