【发布时间】:2011-12-12 11:15:55
【问题描述】:
在寻找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 实现进行编译,但如果它确实编译,您可以确定它可以工作?
【问题讨论】:
-
Mathew Austern 提供了很好的解释here。如果总结并链接到文章,这很可能是一个答案。现在我有点忙于工作但有人可以随意这样做。
标签: c++ stl undefined-behavior