我不停地尝试使用不同的搜索词来寻找答案,但在谷歌和stackoverflow上都只能找到噪音。如果我使用C++标准库(std)编写代码,它是否基本上可以保证在Windows、Mac和Linux上编译(并希望按预期工作)?
我不停地尝试使用不同的搜索词来寻找答案,但在谷歌和stackoverflow上都只能找到噪音。如果我使用C++标准库(std)编写代码,它是否基本上可以保证在Windows、Mac和Linux上编译(并希望按预期工作)?
代码可以保证在所有符合标准的编译器/平台上兼容,但需要注意的是ABI不一定如此,也就是说您不能假设安全地链接来自不同编译器/版本/平台的二进制文件。
在实践中,这意味着不要将STL对象(如string
或vector
)从一个库传递到另一个库,除非您在完全相同的方式下同时编译了两者。当传递指向动态数据的指针时,这一点尤为重要:如果您无法满足上述保证,则不能在库API中使用shared_ptr
,而必须改用普通指针。
这个观点是认为任何不符合STL标准的内容都不符合C++标准,因此在某种程度上,所有STL都是跨平台的。
但是,请注意,STL的某些部分允许被实现定义。例如,参见type_info::name。