std::optional<T>::operator->, std::optional<T>::operator*

来自cppreference.com
< cpp‎ | utility‎ | optional
 
 
 
 
constexpr const T* operator->() const;
(1) (C++17 起)
constexpr T* operator->();
(1) (C++17 起)
constexpr const T& operator*() const&;
(2) (C++17 起)
constexpr T& operator*() &;
(2) (C++17 起)
constexpr const T&& operator*() const&&;
(2) (C++17 起)
constexpr T&& operator*() &&;
(2) (C++17 起)

访问所含值。

1) 返回指向所含值的指针。
2) 返回到所含值的引用。

*this 不含值则行为未定义。

参数

(无)

返回值

指向所含值的指针或到它的引用。

异常

(无)

注意

此运算符不检查 optional 是否含值!你能手动用 has_value() 或简单地用 operator bool() 做检查。还有,若需要有检查访问,可使用 value()value_or()

示例

#include <optional>
#include <iostream>
#include <string>
 
int main()
{
    using namespace std::string_literals;
 
    std::optional<int> opt1 = 1;
    std::cout<< "opt1: "  << *opt1 << '\n';
 
    *opt1 = 2;
    std::cout<< "opt1: "  << *opt1 << '\n';
 
    std::optional<std::string> opt2 = "abc"s;
    std::cout<< "opt2: " << *opt2 << " size: " << opt2->size() << '\n';
 
    // 你能通过在到 optional 的右值上调用 operator* “取”其所含值
 
    auto taken = *std::move(opt2);
    std::cout << "taken: " << taken << " opt2: " << *opt2 << "size: " << opt2->size()  << '\n';
}

可能的输出:

opt1: 1
opt1: 2
opt2: abc size: 3
taken: abc opt2: size: 0

参阅

返回所含值
(公开成员函数)
若所含值可用则返回它,否则返回另一个值
(公开成员函数)