optional — std::optional
optional — std::optional
std::optional 클래스 템플릿은 선택적(있을 수도 없을 수도 있는) 포함 값을 관리하는 타입이에요. C++17에서 도입됐어요. <optional> 헤더에 있어요.
값이 "있거나 없거나"를 표현해, 빈 값·실패를 명시적으로 나타낼 수 있어요.
출처: cppreference
본문
// <optional> 헤더, C++17
template< class T >
class optional;
사용 예
#include <optional>
#include <string>
std::optional<int> parseInt(const std::string& s) {
if (s.empty()) return std::nullopt; // 값 없음
return std::stoi(s); // 값 있음
}
int main() {
auto a = parseInt("42");
if (a.has_value()) {
int n = *a; // 42
}
auto b = parseInt("");
if (!b) { } // operator bool로 확인
int safe = b.value_or(-1); // -1 (기본값)
}
주요 연산
| 연산 | 설명 |
|---|---|
has_value() / operator bool |
값을 가졌는지 |
*, value() |
값 접근 |
value_or(v) |
값 또는 기본값 |
emplace(args...) |
배치 생성 |
reset() |
값 제거 |
operator-> |
값의 멤버 접근 |
swap() |
교환 |
비교·전달
std::optional<int> a = 5;
if (a.value() == 5) { }
if (a > 3) { } // 비교 가능
// 함수 인자·반환에 자주 사용
std::optional<std::string> maybe(const std::optional<std::string>& s);
특징
std::nullopt로 "값 없음"을 나타내요.- 스몰 버퍼 최적화 — 작은
T는 힙 할당 없이 저장. - 예외/오류 코드 대신 "결과가 없을 수 있음"을 타입으로 표현.
// 맵 조회
std::map<std::string,int> m;
auto it or result = /* optional로 감싸기 */;
std::optional은 "값이 있을 수도 없을 수도 있는" 선택형 데이터를 안전하고 명확하게 다루는 표준 타입이에요.