본문 바로가기
프로그래밍 언어/C++

사용자 정의 리터럴(literal)

by 규봉봉이 2024. 7. 23.

C++ 표준 라이브러리에는 사용자 정의 리터럴(user-defined literals)을 정의할 수 있는 기능이 존재

특정 형식의 값을 쉽게 생성할 수 있도록 도와줌

 

사용자 정의 리터럴의 기본 사용법

사용자 정의 리터럴을 정의하려면 operator""을 사용합니다. 예를 들어, 길이를 나타내는 meter와 kilometer 리터럴을 정의할 수 있습니다.

#include <iostream>

class Length {
public:
    explicit Length(long double value) : value_(value) {}
    long double getValue() const { return value_; }

private:
    long double value_;
};

Length operator"" _m(long double value) {
    return Length(value);
}

Length operator"" _km(long double value) {
    return Length(value * 1000);
}

int main() {
    Length distance1 = 5.0_km;
    Length distance2 = 300.0_m;

    std::cout << "Distance 1: " << distance1.getValue() << " meters" << std::endl;
    std::cout << "Distance 2: " << distance2.getValue() << " meters" << std::endl;

    return 0;
}

 

사용자 정의 리터럴 정의 규칙

사용자 정의 리터럴은 다음 네 가지 타입을 받을 수 있습니다:

  1. const char* (문자열 리터럴)
  2. unsigned long long (정수 리터럴)
  3. long double (부동 소수점 리터럴)
  4. char (단일 문자 리터럴)

 

표준 라이브러리의 리터럴 네임스페이스

C++ 표준 라이브러리에는 여러 사용자 정의 리터럴이 네임스페이스로 제공됩니다. 예를 들어, 시간 리터럴은 std::chrono_literals, 문자열 리터럴은 std::string_literals 네임스페이스에 정의되어 있습니다.

#include <iostream>
#include <chrono>
#include <string>

using namespace std::chrono_literals;
using namespace std::string_literals;

int main() {
    auto duration = 10s;
    auto str = "example"s;

    std::cout << "Duration: " << duration.count() << " seconds" << std::endl;
    std::cout << "String: " << str << std::endl;

    return 0;
}

 

'프로그래밍 언어 > C++' 카테고리의 다른 글

싱글턴 패턴 적용  (0) 2024.08.21
std::count_if  (1) 2024.07.23
std::tie  (1) 2024.07.23
C++17 구조화된 바인딩(structured bindings)  (0) 2024.07.23
생성자 이니셜라이저(initializer list)  (0) 2024.07.23