好的,所以我知道有多个c ++版本。我真的不太了解它们之间的差异,但我的问题是:
假设我在c ++ 11中创建了一个c ++应用程序并将其发送到另一台计算机,它是否会产生其他版本的c ++的错误,还是会自动检测到它并运行该版本?
或者我错了,是否在编译时定义了?有人请告诉我,因为我还没有在谷歌上找到我的问题的单一答案。
答案 0 :(得分:6)
这取决于您是否将源代码复制到另一台机器,并在那里编译,或者如果您在机器上编译它并将生成的二进制文件发送到另一台计算机。
C ++由编译器转换为机器代码,直接在处理器上运行。任何具有兼容处理器的计算机都将理解机器代码,但还有更多。该程序需要与文件系统,图形适配器等接口。这部分通常由操作系统以不同的方式处理。即使其中一些是由C ++库提取的,对操作系统的调用也是不同的,并且是特定的。
例如,即使两台计算机具有相同的处理器和硬件,ubuntu的编译二进制文件也不会在Windows上运行。
如果您将源代码复制到另一台机器,并在那里编译(或使用交叉编译器),如果您不使用特定于操作系统的功能,您的程序应该编译并运行正常。
C ++版本对编译很重要,如果你有C ++ 11源代码,你当然需要一个支持C ++ 11的编译器,但是一旦编译完程序,它就不再重要了。
答案 1 :(得分:5)
C ++被编译为机器代码,然后可以在具有该架构的任何计算机上运行,例如, i386或x64(将SSE等处理器功能放在一边)。
对于Java来说,带来一个反例,它是不同的。在那里,代码被编译为字节码格式,与机器无关。 Java虚拟机(JVM)读取/理解此字节码格式。然后,JVM必须可用于您的体系结构,并且必须安装正确的版本。
答案 2 :(得分:5)
或者我错了,是否在编译时定义了?
这正是这个想法:编译代码,之后语言版本几乎无关紧要。唯一可能的缺陷是,如果一个较新的C ++版本包含对标准C ++库(库,而不是语言本身!)的重大改变。但是,由于该库的绝大多数是模板代码,因此无论如何它都会与您自己的代码一起编译。它基本上与您自己的代码一起放入您的.exe
文件中,因此它和您的一样便携。此外,C和C ++设计人员都非常小心而不是来破坏旧代码;所以你甚至可以期望系统本身提供的那些部件(标准C库)不会破坏任何东西。
因此,即使理论上存在一些问题,纯C ++代码也应该在所有理解与编译机器相同.exe
格式的机器上运行良好。