C++:所有"std"跨平台吗?

Jon*_*han 13 c++ cross-platform std standard-library

我一直在为这个问题尝试不同的搜索术语,我只是在谷歌和stackoverflow上发现噪音.如果我使用C++的标准库(std)编写代码,基本上可以保证为Windows,Mac和Linux编译(并希望按预期工作)?

Mar*_*som 16

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

这里有多个标准需要关注 - C++ 98,C++ 03,C++ 11,C++ 14,C++ 17,并且已经开始C++ 20开展工作.有时,最新的当前标准中的功能将不会在每个编译器中实现.如果你坚持使用C++ 03,你应该找到广泛的一致性.

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


Mah*_*dsi 9

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

在实践中,这意味着不及格STL对象,如stringvector周围对面一个库到另一个,除非你俩在完全相同的时间完全相同的方式编译.在将指针传递给动态数据时,这一点尤其重要:shared_ptr除非能够满足上述保证,否则不能在库API中使用,而是需要使用常规指针.

  • 为什么像libFLAC这样的库(http://flac.sourceforge.net/api/classFLAC_1_1Decoder_1_1File.html)导出在这种情况下采用`std :: string`参数的函数? (3认同)