创建 C++ 程序时是否需要关心字节顺序?

Do I need to care about endianness when creating c++ program?

我知道在从二进制文件和网络中读取数据时我应该关心这一点,但是对于源代码呢?如果我赋值,例如 int = 42,字节顺序是否重要?它会在具有大端顺序的大端机器上编译然后在小端机器上不能正常工作吗?或者编译器会处理这个?

将程序编译为机器代码时,必须针对特定的 CPU 体系结构。构建链将负责生成目标 CPU 理解的代码和数据。

您通常无法在不兼容的 CPU 上执行已编译的程序。 (不是没有仿真。在仿真的情况下,仿真器必须处理二进制表示的差异)

尽管它被誉为低级语言,但在编写 C++ 代码时,您实际上并不是在为具体的计算机编写代码。

相反,C++ 代码以称为 C++ Abstract Machine 的东西为目标,编译器的工作是将您的程序在该抽象机上引起的行为转换为 某物 (技术上任何)对实际目标机器造成相同影响的东西。

实际上,大多数编译器都会绕过这一点并将代码半直接转换为最终目标,但这仍然是他们必须遵守的模型。

在我们认为理所当然的其他事物中,字节顺序并不是 C++ 抽象机中存在的概念。除非您像您指出的那样深入研究原始数据,否则您不必担心。

作为一个极端的例子,以位移运算符 >> 为例。它在多字节类型的抽象机上具有定义明确的行为,因此它的行为不能依赖于目标的字节顺序。位移的不是实际位,而是 value.