ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 사용자 정의 리터럴(literal)
    프로그래밍 언어/C++ 2024. 7. 23. 16:03

    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
Designed by Tistory.