C ++:所有“std”跨平台吗?

时间:2013-02-06 04:52:08

标签: c++ cross-platform std standard-library

我一直在为这个问题尝试不同的搜索字词,而我只是在Google和stackoverflow上找到了噪音。如果我使用C ++的标准库(std)编写代码,基本上可以保证为Windows,Mac和Linux编译代码(并希望按预期工作)?

3 个答案:

答案 0 :(得分:15)

标准定义了C ++编译器的含义,所有声称是C ++的编译器都应该符合标准;任何不能被认为是错误的。所有主要的编译器都尽力遵守。

此处需要关注multiple standards - C ++ 98,C++03C++11C++14C++17和{{3}在work has started上。有时,最新的当前标准中的功能将不会在每个编译器中实现。如果你坚持使用C ++ 03,你应该找到广泛的符合性。

根据定义,std命名空间中的所有内容都应该是标准的一部分。

答案 1 :(得分:8)

保证代码兼容所有符合标准的编译器/平台,但重要的是要注意ABI不是,即您可能不会认为链接跨不同编译器/版本/平台创建的二进制文件是安全的。 / p>

实际上,这意味着不要将stringvector之类的STL对象从一个库传递到另一个库,除非您在完全相同的时间以完全相同的方式编译它们。在将指针传递给动态数据时,这一点尤其重要:除非您能够满足上述保证,否则不能在库API中使用shared_ptr,而是需要使用常规指针。

答案 2 :(得分:0)

论点是任何不符合STL的东西都不符合C ++,因此,在某方面,是的,所有STL都是跨平台的。

但是,请注意,允许STL的某些部分是实现定义的。例如,请参阅type_info::name