【发布时间】:2015-09-11 21:20:39
【问题描述】:
以下代码似乎可以在 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 的指针。
这是保证工作,还是未定义的行为?
【问题讨论】:
标签: c++ c++11 stl forward-declaration c++17