C++ 版本,它们会自动检测 exe 的版本吗?

C++ Versions, do they auto-detect the version of an exe?

好的,我知道有多个 c++ 版本。我不太了解它们之间的区别,但我的问题是:
假设我在 C++ 11 中创建了一个 C++ 应用程序并将其发送到另一台计算机,它会从其他版本的 C++ 中出现错误,还是会自动检测到它并 运行 使用该版本?
还是我理解错了,它是在编译时定义的吗?有人请告诉我,因为我还没有在 google.

上找到我的问题的单一答案

C++ 被编译为机器代码,然后可以在具有该体系结构的任何计算机上运行,​​例如i386 或 x64(将 SSE 等处理器功能放在一边)。

对于Java,来个反例,就不同了。代码被编译成字节码格式,即与机器无关。此字节码格式是由 Java 虚拟机 (JVM) read/understood。然后 JVM 必须可用于您的体系结构并且必须安装正确的版本。

Or am I getting this wrong and is it defined at compile time?

正是这个想法:代码被编译,之后语言版本几乎无关紧要。唯一可能的陷阱是,如果更新的 C++ 版本包含对标准 C++ 库(库,而不是语言本身!)的重大更改。但是,由于该库的绝大部分是模板代码,因此无论如何它都是与您自己的代码一起编译的。它基本上与您自己的代码一起嵌入到您的 .exe 文件中,因此它与您的代码一样具有可移植性。此外,C 和 C++ 设计人员都非常注意 而不是 破坏旧代码;所以你可以期望即使是系统本身(标准 C 库)提供的那些部分也不会破坏任何东西。

因此,即使在理论上可能存在一些问题,纯 C++ 代码应该 运行 在理解与编译它的机器相同的 .exe 格式的所有机器上都没有问题。

这取决于您是将源代码复制到另一台机器并在那里编译,还是在您的机器上编译并将生成的二进制文件发送到另一台计算机。

C++ 由编译器翻译成机器代码,运行直接在处理器上运行。任何具有兼容处理器的计算机都能理解机器代码,但不仅如此。该程序需要与文件系统、图形适配器等接口。这部分通常由操作系统以不同的方式处理。即使其中一些是由 C++ 库抽象的,对操作系统的调用也是不同的,并且是特定于它的。

例如,为 ubuntu 编译的二进制文件将不会 运行 在 windows 上,即使两台计算机具有相同的处理器和硬件。

如果你将源代码复制到另一台机器,并在那里编译它(或使用交叉编译器),你的程序应该编译并且 运行 没问题,如果你不使用 OS-特定功能。

C++ 版本对编译很重要,如果你有 C++11 源代码,你当然需要一个支持 C++11 的编译器,但是一旦程序被编译,就不再重要了。