在寻找 this question 的解决方案时,我找到了这个 thread on another forum ,它表示该标准要求完全定义 STL-Datastructure 的所有模板参数。这意味着生成一个结构,该结构在其内部存储其自身类型的元素会调用未定义的行为。然而,据我所知,大多数 C++11 之前的数据结构(即 std::vector
、std::map
等)都没有捕获到这一点。
在 STL 数据结构中使用不完整类型实际上可能是什么问题?或者更确切地说,以下代码可能导致什么潜在危险:
#include <stdint.h>
#include <map>
struct Test {
std::map<uint32_t, Test> m_map1;
};
int main() {
return 1;
}
或者这是其中的一个问题,该代码可能无法通过某些 STL 实现进行编译,但如果可以编译,您可以确定它可以正常工作?
最佳答案
简短的回答是:因为标准是这么说的。更普遍, 取决于实现,以及每种类型和功能的作用, 实例化一个模板可能需要一个完整的定义。作者们 标准的人不想,或者没有时间分析 并详细说明在什么情况下他们不想要求完整 定义,并达成一揽子声明。还要注意,当 标准写好了,经验相对较少 STL,可以肯定的是没有一些巧妙的优化 这将需要类中参数类型的实例; 与其冒着禁止这种优化的风险,这样做似乎更安全 需要一个完整的类型。
关于c++ - 为什么 STL 数据结构需要完全定义的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8473455/