我一直在为这个问题尝试不同的搜索字词,而我只是在Google和stackoverflow上找到了噪音。如果我使用C ++的标准库(std)编写代码,基本上可以保证为Windows,Mac和Linux编译代码(并希望按预期工作)?
答案 0 :(得分:15)
标准定义了C ++编译器的含义,所有声称是C ++的编译器都应该符合标准;任何不能被认为是错误的。所有主要的编译器都尽力遵守。
此处需要关注multiple standards - C ++ 98,C++03,C++11,C++14,C++17和{{3}在work has started上。有时,最新的当前标准中的功能将不会在每个编译器中实现。如果你坚持使用C ++ 03,你应该找到广泛的符合性。
根据定义,std
命名空间中的所有内容都应该是标准的一部分。
答案 1 :(得分:8)
保证代码兼容所有符合标准的编译器/平台,但重要的是要注意ABI不是,即您可能不会认为链接跨不同编译器/版本/平台创建的二进制文件是安全的。 / p>
实际上,这意味着不要将string
或vector
之类的STL对象从一个库传递到另一个库,除非您在完全相同的时间以完全相同的方式编译它们。在将指针传递给动态数据时,这一点尤其重要:除非您能够满足上述保证,否则不能在库API中使用shared_ptr
,而是需要使用常规指针。
答案 2 :(得分:0)
论点是任何不符合STL的东西都不符合C ++,因此,在某方面,是的,所有STL都是跨平台的。
但是,请注意,允许STL的某些部分是实现定义的。例如,请参阅type_info::name