STD ::可选的微不足道默认构造函数



std::optional<T>不能毫无默认的构造?

似乎唯一的障碍是 engaged标志的初始化,但零限制不能处理情况?

如果您可以使它在毫无默认的构造上,则在以下声明中:

std::optional<int> o;

engaged flag(或等效的内部表示形式)将是(1)。

是,用户可以使用正确的初始化:

std::optional<int> o{};

但是,封装的目的是以这样的方式设计您的班级,无论某人与您的班级写了什么法律代码,此类对象始终处于有效状态(2))。IE。您需要保证,无论您的对象如何被操纵,它永远不会"破坏"。


(1)除非是全局/静态的,在这种情况下,订婚的内部表示将被零定为零(感谢Nicol Bolas指出它)

(2)请注意,在此处,按照有效状态,我的意思是所有数据成员都有意义的状态(它们满足了类不变的次数)。例如,矢量的内部大小正确反映了持有的对象数量,参与标志正确反映了可选的基础对象,等等。

相关内容

最新更新