bol*_*lov 6 c++ optional c++17
这里描述了为c ++提出的对象nullopt_t和对象:nulloptoptional
Run Code Online (Sandbox Code Playgroud)struct nullopt_t{see below}; constexpr nullopt_t nullopt(unspecified);[...]类型nullopt_t不应具有默认构造函数.它应该是文字类型.常量nullopt应使用文字类型的参数进行初始化.
其原因在文档的op = {}语法章节中进行了解释:为了op = {}明确一些必须采用的技巧,其中一个nullopt_t必须不是默认的可构造的.
我的问题是文字类型在这里意味着什么?我找到了这个SO帖子.所以在我看来,只有另一个空类才能做到.它也可以是一个构造函数int吗?
最小的整合nullopt_t课程会是什么样的?
像这样的东西:
struct nullopt_t_construct_tag_t{};
struct nullopt_t {
nullopt_t() = delete; // I know declaring it as deleted is redundant
constexpr nullopt_t(nullopt_t_construct_tag_t) {};
};
constexpr nullopt_t nullopt(nullopt_t_construct_tag_t{});
Run Code Online (Sandbox Code Playgroud)
或这个:
struct nullopt_t {
nullopt_t() = delete;
constexpr nullopt_t(int) {};
};
constexpr nullopt_t nullopt(0);
Run Code Online (Sandbox Code Playgroud)
最小的实现是
struct nullopt_t {
constexpr nullopt_t(int) {}
};
Run Code Online (Sandbox Code Playgroud)
不会隐式声明默认构造函数,[class.ctor]/4:
如果类没有用户声明的构造
X函数,则没有参数的构造函数被隐式声明为默认值(8.4).
... nullopt_t可以用int文字类型构建.
请注意,在您的代码中,默认构造函数存在,但被定义为已删除.
上面的定义确实符合文字类型的要求:
类型是文字类型,如果它是:
(10.5) - 具有以下所有属性的类类型(第9节):
- 它有一个简单的析构函数,
- 它是一个聚合类型(8.5.1)或至少有一个
constexpr构造函数[..]不是复制或移动构造函数,并且- 它的所有非静态数据成员和基类都是非易失性文字类型.
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |