tml*_*len 10 c++ stl forward-declaration c++11 c++17
以下代码似乎在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();
}
Run Code Online (Sandbox Code Playgroud)
std::vector<A>声明数据成员时,A仍然是不完整的类型.同样在使用std::vector<B>和B只向前声明class B;.它应该工作,std::vector因为它只包含一个指针A.
这是保证工作还是未定义的行为?
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |