Namespaces
Variants

std::experimental::optional<T>:: value_or

From cppreference.net
template < class U >
constexpr T value_or ( U && default_value ) const & ;
(库基础技术规范)
template < class U >
constexpr T value_or ( U && default_value ) && ;
(库基础技术规范)

* this 包含值则返回所含值,否则返回 default_value

1) 等价于 bool ( * this ) ? ** this : static_cast < T > ( std:: forward < U > ( default_value ) )
2) 等价于 bool ( * this ) ? std :: move ( ** this ) : static_cast < T > ( std:: forward < U > ( default_value ) )

目录

参数

default_value - * this 为空时使用的值
类型要求
-
T 必须满足 CopyConstructible 的要求才能使用重载 (1)。
-
T 必须满足 MoveConstructible 的要求才能使用重载 (2)。
-
U&& 必须可转换为 T

返回值

* this 有值则返回当前值,否则返回 default_value

异常

返回值 T 所选构造函数抛出的任何异常。

示例

#include <cstdlib>
#include <experimental/optional>
#include <iostream>
std::experimental::optional<const char*> maybe_getenv(const char* n)
{
    if (const char* x = std::getenv(n))
        return x;
    else
        return {};
}
int main()
{
    std::cout << maybe_getenv("MYPWD").value_or("(none)") << '\n';
}

可能的输出:

(none)

参见

返回所含值
(公开成员函数)