是用来区分到底是用optional<T>的默认构造函数还是T的默认构造函数,参见N3527,in_place_t原本的名字是emplace:
该提议提供了一个'in_place'构造函数能将optional的构造函数的参数完美转发给T的构造函数。为了触发这个构造函数我们应该使用标签结构emplace。我们需要额外的标签来区分一些情况,比如是调用optional的默认构造函数还是要T的默认构造函数:
optional<Big> ob{emplace, "1"}; // 调用构造函数 Big{"1"} (不移动) optional<Big> oc{emplace}; // 调用构造函数 Big{} (不移动) optional<Big> od{}; // 创建一个 disengaged 的 optional
……另一方面,在很多容器类型中emplace在std:中被重载成既是成员函数也是标签,如果这个问题很严重,那么标签(emplace作为标签的情况)可以被重命名为in_place。