std::expected<T,E>::operator bool, std::expected<T,E>::has_value
来自cppreference.com
| constexpr explicit operator bool() const noexcept; |
(1) | (C++23 起) |
| constexpr bool has_value() const noexcept; |
(2) | (C++23 起) |
检查 *this 是否表示预期值。
返回值
注解
一个 std::expected 对象永远不会无值。如果 has_value() 返回 true,那么可以用 operator*() 访问预期值;否则,可以用 error() 访问非预期值。
示例
运行此代码
#include <charconv> #include <concepts> #include <cstdint> #include <expected> #include <print> #include <string> #include <string_view> #include <system_error> template<std::integral Int = int> constexpr std::expected<Int, std::string> to_int(std::string_view str) { Int value{}; const auto [_, ec] = std::from_chars(str.data(), str.data() + str.size(), value); if (ec == std::errc()) return value; return std::unexpected{std::move(std::make_error_code(ec).message())}; } int main() { if (auto result = to_int("42"); result.has_value()) std::println("{}", *result); // 经检查后,使用 operator* 是安全的 else std::println("{}", result.error()); if (const auto result = to_int("not a number"); result) std::println("{}", *result); else std::println("{}", result.error()); if (const auto result{to_int<std::int16_t>("32768")}) // 隐式调用了 (1) std::println("{}", *result); else std::println("{}", result.error()); }
可能的输出:
42 Invalid argument Numerical result out of range
参阅
| 访问预期值 (公开成员函数) | |
| 返回非预期值 (公开成员函数) | |
| 检查对象是否含值 ( std::optional<T> 的公开成员函数) |