std::optional<T>::operator->, std::optional<T>::operator*
Материал из cppreference.com
<tbody>
</tbody>
constexpr const T* operator->() const noexcept; |
(1) | (начиная с C++17) |
constexpr T* operator->() noexcept; |
(1) | (начиная с C++17) |
constexpr const T& operator*() const& noexcept; |
(2) | (начиная с C++17) |
constexpr T& operator*() & noexcept; |
(2) | (начиная с C++17) |
constexpr const T&& operator*() const&& noexcept; |
(2) | (начиная с C++17) |
constexpr T&& operator*() && noexcept; |
(2) | (начиная с C++17) |
Доступ к содержащемуся значению.
1) Возвращает указатель на содержащееся значение.
2) Возвращает ссылку на содержащееся значение.
Поведение не определено, если *this не содержит значения.
Содержание
Параметры
(нет)
Возвращаемое значение
Указатель или ссылка на содержащееся значение.
Примечание
Этот оператор не проверяет, содержит ли optional значение! Вы можете сделать это вручную, используя has_value() или просто operator bool(). В качестве альтернативы, если требуется проверенный доступ, можно использовать value() или value_or().
Пример
Запустить этот код
#include <optional>
#include <iostream>
#include <iomanip>
#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 = "абв"s;
std::cout<< "opt2: " << std::quoted(*opt2) << " размер: " << opt2->size() << '\n';
// Вы можете "взять" содержащееся значение, вызвав operator*
// для rvalue объекта optional
auto taken = *std::move(opt2);
std::cout << "taken: " << std::quoted(taken) << '\n'
<< "opt2: " << std::quoted(*opt2)
<< ", размер: " << opt2->size() << '\n';
}
Вывод:
opt1: 1
opt1: 2
opt2: абв размер: 3
taken: абв
opt2: "", размер: 0
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 2762 | C++17 | operator-> и operator* могут быть потенциально генерирующими исключения
|
сделаны noexcept |
Смотрите также
| возвращает содержащееся значение (public функция-элемент) | |
| возвращает содержащееся значение, если доступно, иначе другое значение (public функция-элемент) |