以下代码似乎在 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
。
这是保证工作,还是未定义的行为?