【发布时间】:2020-11-30 12:14:08
【问题描述】:
为什么不能在 A 类中定义 std::optional 类型的类成员?
例子:
#include <optional>
class A {
public:
A(std::optional<A> optional = {}) : optional_(optional) { }
~A() = default;
private:
std::optional<A> optional_;
};
编译器错误:
error: incomplete type 'A' used in type trait expression
: public integral_constant<bool, __is_trivially_destructible(_Tp)> {};
^
error: incomplete type 'A' used in type trait expression
: public integral_constant<bool, __is_constructible(_Tp, _Args...)>
^
【问题讨论】:
-
在构造
A时,必须分配足够的内存来存储A的所有成员。但是A可能包含一个A,它可能包含一个A,它可能包含一个A... 无限。如果A可以保存std::optional<A>,则堆栈上需要无限内存。
标签: c++ c++17 stdoptional