gpt4 book ai didi

C++ optional_t 类型标签 (n3527)

转载 作者:行者123 更新时间:2023-11-30 05:29:26 25 4
gpt4 key购买 nike

n3527建议添加std::optional<T>到 C++。作为它的一部分,它定义了 nullopt_t类型标签。

gcc (4.9) 的 libstdc++ 定义了 optional_t如下:

struct nullopt_t
{
enum class _Construct { _Token };
explicit constexpr nullopt_t(_Construct) { }
};
constexpr nullopt_t nullopt { nullopt_t::_Construct::_Token };

clang 的 (3.6) libc++ 将其定义为:

struct nullopt_t
{
explicit constexpr nullopt_t(int) noexcept {}
};
constexpr nullopt_t nullopt{0};

我的问题是:为什么这样做(看起来)过于复杂了?

也就是说,为什么不能这样定义:

struct nullopt_t { };
constexpr nullopt_t nullopt { };

例如,std::defer_lock_t 是这样的和其他在标准库中定义。

最佳答案

在这里回答我自己,但感谢 kakkoko 让我走上了正确的轨道。

相关问题链接到更新版本 n3793 ,它阐述了 The op = {} syntaxnullopt_t 的额外复杂性段。

简而言之,nullopt_t 以这种方式声明,使其成为非DefaultConstructible,以避免 op = {} 的歧义> 语法。您可以阅读前面链接的段落以了解更多详细信息。

关于C++ optional_t 类型标签 (n3527),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com