以下代码似乎在 Clang++ 和 GCC 上正常工作:
#include <vector>
class A {
private:
int i;
std::vector<A> children;
public:
A& add();
};
A& A::add() { children.emplace_back(); return children.back(); }
int main() {
A a;
A& a2 = a.add();
}
当数据成员std::vector<A>被声明时,A仍然是一个不完整的类型。使用时相同,std::vector<B>并且B仅使用class B;. 它应该可以使用,std::vector因为它只包含一个指向 - 的指针A。
这是保证工作,还是未定义的行为?