std::optional<T>::operator->, std::optional<T>::operator*
cppreference.net에서 발췌
constexpr const T* operator->() const noexcept;
|
(1) | (C++17부터) |
constexpr T* operator->() noexcept;
|
(2) | (C++17부터) |
constexpr const T& operator*() const& noexcept;
|
(3) | (C++17부터) |
constexpr T& operator*() & noexcept;
|
(4) | (C++17부터) |
constexpr const T&& operator*() const&& noexcept;
|
(5) | (C++17부터) |
constexpr T&& operator*() && noexcept;
|
(6) | (C++17부터) |
포함된 값에 접근합니다.
1,2) 포함된 값에 대한 포인터를 반환합니다.
3-6) 포함된 값에 대한 참조를 반환합니다.
|
has_value()가 |
(C++26까지) |
|
has_value()가 |
(C++26부터) |
반환값
1,2)
val
3,4)
*
val
5,6)
std
::
move
(
*
val
)
참고 사항
이 연산자는 * this 가 값을 포함하는지 여부를 확인하지 않으며, 사용자는 has_value() 또는 operator bool() 를 사용하여 수동으로 확인할 수 있습니다. 또는 확인된 접근이 필요한 경우 value() 또는 value_or() 를 사용할 수 있습니다.
예제
이 코드 실행
#include <iomanip> #include <iostream> #include <optional> #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: " << std::quoted(*opt2) << ", size: " << opt2->size() << '\n'; // rvalue optional에 대해 operator*를 호출하여 포함된 값을 "가져올" 수 있습니다 auto taken = *std::move(opt2); std::cout << "taken: " << std::quoted(taken) << "\n" "opt2: " << std::quoted(*opt2) << ", size: " << opt2->size() << '\n'; }
출력:
opt1: 1 opt1: 2 opt2: "abc", size: 3 taken: "abc" opt2: "", size: 0
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2762 | C++17 |
operator->
와
operator*
가 잠재적으로 예외를 발생시킬 수 있음
|
noexcept로 지정됨 |
참고 항목
|
포함된 값을 반환합니다
(public member function) |
|
|
사용 가능한 경우 포함된 값을, 그렇지 않으면 다른 값을 반환합니다
(public member function) |