[C++]optional

2018. 12. 6. 16:55·Language/C C++
반응형
[C++]optional

[C++]optional

C++17의 표준으로 optional이 도입되었다. 이전에 자바 스프링 개발을 할 때도 본적이 있었는데 C++에서 보니 반갑다. 자바는 jdk1.8부터 optional 지원이 된것으로 알고있다. 그러면 이 optional은 무엇일까?

함수를 작성하는 예시를 들어보자. 두 INT값을 나누어 결과를 반환하는 함수를 작성하려고 한다.

double divide(int a, int b) {
    return (double)a / b;
}

만일 이 함수에 인자 b에 0이 주어진다면 exception이 발생할 것이다. 따라서 b == 0일 경우 실패했다는 결과값을 반환해야 한다.

xxxxxxxxxx
double divide(int a, int b) {
    if (b == 0) {
        //fail code
    }
    return (double)a / b;
}

여기서 작성한 함수의 반환값은 double이기 때문에 실패라는 결과를 알 수 있는 방법이 없다. 함수의 성공 여부를 확인하기 위해 다음과 같은 방법들을 생각해볼 수 있다.

  • 인자에 double*형을 받아 결과값을 보낸다.
  • 예외를 throw한다.
  • 반환값을 pair<double, bool>식으로 처리한다.

위 방법들보다 간소하게 처리할 수 있는 방법이 optional이다. optional은 결과값과 성공 여부를 모두 담을 수 있다. 이를통해 반환값으로 함수의 실패 여부까지 처리할 수 있다. optional에서 사용할 수 있는 내부함수 두 가지가 있다.

  • value : 결과 값을 반환한다.
  • value_or(T value) : 성공하면 결과 값을 반한하고, 아닐경우 해당값을 반환한다.

이것을 통해 실패시 적절한 처리를 할 수 있다.

xxxxxxxxxx
#include<optional>
​
std::optional<double> divide(int a, int b) {
    if (b == 0) {
        return {};  //fail
    }
    return (double)a / b;
}
xxxxxxxxxx
int main() {
    if (auto res = divide(1, 2)) {
        std::cout << res.value() << std::endl;
    }
    else {
        std::cout << "fail" << std::endl;
    }
    return 0;
}
반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/C C++' 카테고리의 다른 글
  • [C/C++] 소켓 프로그래밍
  • [C/C++] const keyword
  • 아이템선택
  • 중복 없는 난수 생성
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Spring Framework (7)
        • Spring (3)
        • JPA (2)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    PS
    딥러닝
    게임 개발
    C
    언리얼엔진4
    JavaScript
    블루프린트
    클래스
    mscoco
    프로그래머스
    파이썬
    알고리즘
    map
    Unreal Engine
    CPP
    JS
    C++
    Python
    게임
    FPS
    memcached
    Unreal
    MySQL
    select
    php
    웹
    자바
    pytorch
    NUXT
    redis
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[C++]optional
상단으로

티스토리툴바