Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::optional::value\u或默认值,std::optional::已启用_C++_C++17 - Fatal编程技术网

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也被禁用了