问题在于:
//dynamic_module1, compiled with C++11
std::vector<int> some_function();
//dynamic_module2, compiled with C++14
int main() {
...//import some_function from dynamic_module1
std::vector<int> some = some_function();
...
}
这是对的吗?我是否有任何保证,STL容器的内部结构是相同的:
1)如果模块是由具有相同标准版本的不同编译器编译的?
2)如果模块是由相同的编译器编译的,但具有不同的标准版本?
答案 0 :(得分:4)
您没有任何关于此类兼容性的正式保证(标准的两个不同版本之间的标准库容器,甚至两个不同版本的C ++编译器,当然还有两个不同的C ++编译器)。
实际上,如果将相同的编译器(和版本)用于两个不同的标准(例如,如果使用相同 {{进行编译) 1}},另一方面使用g++
并另一方面使用g++ -std=c++11
,您可能(但不确定)获得一些兼容性。
请注意,在实践中(在Linux / Debian / x86-64上),g++ -std=c++14
取决于您用于编译代码的GCC版本。所以GCC 4.8和GCC 4.9的标准C ++库略有不同(大部分时间都是,而总是)。
我不知道Microsoft Visual C ++实际发生了什么,因为我从未使用过Windows。