C++ std::optional::value\u或默认值,std::optional::已启用
我已经使用实验性的C++ std::optional::value\u或默认值,std::optional::已启用,c++,c++17,C++,C++17,我已经使用实验性的std::optional有一段时间了,我想知道是否考虑过像std::optional::value\u或\u default这样的方法。这将为您提供启用时的值,或默认值T(如果未启用)。是的,写std::optional::value\u或(T{})很容易,但有时如果T有一堆字符,我认为它不像写value\u或\u default那样清晰 同样,像n3672这样的论文也没有给出一个很好的理由来解释为什么像std:optional::is_deposed这样的方法没有被包括在内
std::optional
有一段时间了,我想知道是否考虑过像std::optional::value\u或\u default
这样的方法。这将为您提供启用时的值,或默认值T
(如果未启用)。是的,写std::optional::value\u或(T{})
很容易,但有时如果T
有一堆字符,我认为它不像写value\u或\u default
那样清晰
同样,像n3672这样的论文也没有给出一个很好的理由来解释为什么像std:optional::is_deposed
这样的方法没有被包括在内。我理解为什么nullopt
在某些情况下很有用,并且被包括在内,但我认为std::optional::is_deposed
在简单的if表达式中更清晰。这里有一个(经过最低限度测试的)实现供您使用:
template <typename T>
T value_or_default (const std::experimental::optional<T> &s)
{ return s.value_or(T{}); }
模板
T值_或_默认值(常量标准::实验::可选&s)
{返回s.value_或(T{});}
把它放在你的代码库中,你就完成了。@BenVoigt并使用“参与”术语。因此,委员会似乎认真考虑了这一术语。尽管我非常同意
有_值
将是一个更好的名称。最后,拥有这样一个成员函数将与std::iostream::good
等保持一致。@goneskiing我不太确定你的问题是什么。虽然我觉得你的话是有道理的,但SO可能不是讨论有关标准库的“自行车棚”问题的最佳场所。你能不能把你的问题重新表述一下,让它变得更容易回答,少一些讨论?否则,如果你想讨论的话,也许可以考虑邮寄到各自的邮件列表。现在它是“代码> STD::实验:可选的< /Cord>”,它是库基础TS()的一部分。请注意,已启用/未启用的术语已被逐步淘汰,当前的措辞是“包含值”或类似措辞。@LB实际上不是。他们只需更改value\u或以获取varargs。然后,.value\u或()
执行您希望.value\u或({})
执行的操作。可能会添加T&&
非模板重载,以防我们有什么东西试图推断它的计算上下文(使{}
再次工作)。@LucDanton现在cppreference也被禁用了