下一个标准可以改变内部STL容器结构吗
Can internal STL container structure change in next standard
问题在这里:
//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) 如果模块由相同的编译器编译,但标准版本不同?
您对这种兼容性没有任何正式的保证(标准库容器在两个不同版本的标准之间,甚至两个不同版本的 C++ 编译器,当然还有两个不同的 C++ 编译器)。
实际上,如果对两种不同的标准使用 相同的 编译器(和 版本)(例如,如果使用 相同 g++
,一方面使用g++ -std=c++11
,另一方面使用g++ -std=c++14
)你可能(但不确定)以获得一些兼容性。
请注意,在实践中(在 Linux/Debian/x86-64 上),libstdc++
取决于您用来编译代码的 GCC 版本。因此 GCC 4.8 和 GCC 4.9 的标准 C++ 库略有不同(碰巧 大多数时候 但不是 总是 )。
我不知道 Microsoft Visual C++ 实际发生了什么,因为我从未使用过 Windows。
问题在这里:
//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) 如果模块由相同的编译器编译,但标准版本不同?
您对这种兼容性没有任何正式的保证(标准库容器在两个不同版本的标准之间,甚至两个不同版本的 C++ 编译器,当然还有两个不同的 C++ 编译器)。
实际上,如果对两种不同的标准使用 相同的 编译器(和 版本)(例如,如果使用 相同 g++
,一方面使用g++ -std=c++11
,另一方面使用g++ -std=c++14
)你可能(但不确定)以获得一些兼容性。
请注意,在实践中(在 Linux/Debian/x86-64 上),libstdc++
取决于您用来编译代码的 GCC 版本。因此 GCC 4.8 和 GCC 4.9 的标准 C++ 库略有不同(碰巧 大多数时候 但不是 总是 )。
我不知道 Microsoft Visual C++ 实际发生了什么,因为我从未使用过 Windows。