等效等级无符号到符号转换的真实世界可移植性

时间:2019-05-27 10:50:57

标签: c++ c++11 portability signed

采用以下代码

#include <iostream>

int main() {
    unsigned char i = 128;
    signed char j = i;
    std::cout << static_cast<int>(j) << '\n';
}

在GCC上进行编译,这会产生-128,这是大多数程序员自然期望的(假设CHAR_BIT == 8,这在2019年是一个安全的假设)。现在,我完全意识到,初始化signed char j = i;会在C ++ 20之前调用C ++标准中实现定义的行为。

我的问题:实际上,没有人知道C ++的半有趣的编译器实现,而不仅仅是做明显的事情(例如,以上情况)。半有趣的是,我指的是我可以实际遇到的编译器,而不是1985年的Unisys C ++原型编译器,因为它只有DoD才能访问的晦涩的43位体系结构。 GCCMSVC在其文档Clang doesn't中记录了上述行为,但是可观察到的行为是相同的。我的感觉是没有任何东西,而且这种转换虽然是形式上由实现定义的行为,但实际上是可移植的。

0 个答案:

没有答案