gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:30 33 4
gpt4 key购买 nike

从Cvalue的概念,我意识到

"An expression that should not undergo further conversions, either implicitly or explicitly, is called a cvalue expression."

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

s32 = static_cast < int32_t > ( s8 ) + s8; // Example 2 - Compliant
s32 = s32 + s8; // Example 3 - Compliant

显然,正确的加法表达式在这里发生隐式和显式转换。这条规则将它们标记为合规。我认为它与 cvalue 的概念相冲突。

最佳答案

在第 57 页末尾,MISRA Cpp 2008:

Similar, unless listed below:

  • . . .

  • The other unlisted expressions are not cvalues and have the underlying type of the operation.

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

那么,s8不是cvalues,它有操作的底层类型,在你的例子中,它的底层类型是int32_t。升级到 int32_t 并不违反规则。


5-0-3 的重点是它希望确保所有操作都在相同的基础类型中执行。

int32_t s32;
int8_t s8;
s32 = static_cast < int32_t > ( s8 ) + s8; // Example 2 - Compliant
s32 = s32 + s8; // Example 3 - Compliant

在上面的例子中,+ 是用 int32_t 的底层类型执行的(到目前为止,大部分 int int32_tint16_t), 返回int32_t 的底层类型,然后分配给一个int32_t 变量,从而符合MISRA Cpp。

在这个例子中:

int32_t s32;
int8_t s8;
s32 = s8 + s8;

不合规,因为加法运算符是用int类型进行的,结果会被转换成int32_t,这与不是必须的>int,因此不合规。

关于c++ - 在 MISRA C++ 2008 中,有人知道规则 5-0-3 中出现的特殊概念 Cvalue 表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41256292/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com