std::optional
有方法
template< class U > constexpr T value_or( U&& default_value ) const&;
然而,它没有构造函数
template< class U > optional(bool condition, const U& value );
与其他东西相似。或者,您可能希望它具有静态方法/命名构造函数idiom:
constexpr std::optional<T> value_if(bool condition, const T& value) {
return condition ? nullopt : std::optional(value);
}
我的问题:
value_if
是否存在概念性问题(我列出的任何一种变体)?注意:我不确定是const T& value
还是const T&& value
。
答案 0 :(得分:2)
是否存在value_if的概念问题(在我列出的任何一种变体中)?
是。它要求您创建实时T
对象,即使您的条件正在创建nullopt
。如果auto t = cond ? optional<T>(expr) : nullopt;
为expr
,则cond
内联只会评估true
。
例如:
auto optStr1 = value_if(cond, get_object(...)); //Will *always* evaluate get_object
auto optStr2 = cond ? optional(get_object(...)) : nullopt; //Will only evaluate get_object if `cond` is true
是否有类似的建议进入标准?
没有