【发布时间】:2017-06-14 07:00:56
【问题描述】:
为什么下面的代码可以工作?
struct A {
std::vector<A> subAs;
};
A 是不完全类型,对吧?如果有一个 A*s 的向量,我会理解的。但在这里我不明白它是如何工作的。这似乎是一个递归定义。
【问题讨论】:
-
好吧,在最底层,这是否是“递归定义”取决于
std::vector类本身是否包含A类型的任何子对象。在std::vector的典型实现中,没有A类型的直接子对象。在std::vector的典型实现中,它将仅包含一个指向受控序列的A *指针。这消除了数据递归并使使用不完整类型作为参数成为可能。这里唯一的问题是语言规范是允许还是要求它。
标签: c++ templates vector member incomplete-type