类模板 std::optional 管理一个可选的所含值,即既可以存在也可以不存在的值。 一种常见的 optional 使用情况是作为可能失败的函数的返回值。与如 std::pair<T, bool> 等其他手段相比,optional 可以很好地处理构造开销高昂的对象,并更加可读,因为它明确表达了意图。
#include <optional> #include <print> #include <vector> int main() { constexpr std::optional<int> none{std::nullopt}; constexpr std::optional<int> some{42}; static_assert(none.begin() == none.end()); static_assert(some.begin() != some.end()); // 支持范围 for 循环 for (int ...
std::optional<T>::optional constexproptional()noexcept; (1)(since C++17) constexproptional(std::nullopt_t)noexcept; (2)(since C++17) constexproptional(constoptional&other); (3)(since C++17) constexproptional(optional&&other)noexcept(/* see below */); ...
1)LetUbestd::remove_cv_t<std::invoke_result_t<F, T&>>. If*thiscontains a value, returns astd::optional<U>whose contained value isdirect-initializedfromstd::invoke(std::forward<F>(f),**this)(unlikeand_then(), which must return anstd::optionaldirectly). Otherwise, returns an emptystd...
optional(C++17)−any(C++17) variant(C++17)−format(C++20) 文字列ライブラリ basic_string basic_string_view(C++17) ヌル終端文字列: バイト−マルチバイト−ワイド コンテナライブラリ array(C++11)−vector map−unordered_map(C++11) ...
optional(C++17)−any(C++17) variant(C++17) Conversões de string(C++17) Formatting(C++20) Manipulação de bit(C++20) Biblioteca de strings basic_string basic_string_view(C++17) Strings terminados em null: byte−multibyte−wide ...
optional (C++17) − any (C++17) variant (C++17) Chaînes de caractères basic_string basic_string_view (C++17) Chaînes terminées par null: byte − multibyte − wide Conteneurs array (C++11) − vector map − unordered_map (C++11) priority_queue − span (C++20) Autres conte...
optional(C++17) expected(C++23) variant(C++17)−any(C++17) bitset−Bit manipulation(C++20) Containers library vector−deque−array(C++11) list−forward_list(C++11) inplace_vector(C++26) hive(C++26) map−multimap−set−multiset ...
[-Wconcepts-ts-compat] concept bool EqualityComparable = requires(T a, T b) ~~~^ main.cpp:11:7: error: expected concept name with optional arguments ->bool; ^ main.cpp:14:8: error: unknown type name 'EqualityComparable' void f(EqualityComparable&&) {} ^ 1 warning and 2 errors gene...
而且,一些标准库与Boost中的相应部分有这不小的区别。例如,boost::optional接受引用类型,但std::optional不接受。所以std::optional并不能在任何情况下无缝替换boost::optional。 其他函数库也在C++ 11上提供C++ 17的标准组件,如Google的Abseil(https://abseil.io/)。Abseil的网站声称,“Google开发了许多抽象,许多都...