内部 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。
相关文章:
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- C++取消引用指针.为什么会发生变化
- 为什么在读取文件大小时文件IO速度会发生变化
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 为什么cudaMemGetInfo报告设备内存总量的变化
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 内部 STL 容器结构能否在下一个标准中发生变化?
- 为什么声明的主要措辞在标准草案之间发生变化
- 自2002年以来,c++模板标准有什么重大变化吗?
- c++标准工作草案之间的变化
- c++ STL标准是否有变化?