types_add_cv

types_add_cv (타입에 cv 한정자 추가하기)

이 페이지는 C++ 표준 라이브러리 <type_traits>에 정의된 add_cv, add_const, add_volatile 템플릿에 대해 설명해요. 이 템플릿들은 주어진 타입에 const 또는 volatile 한정자를 추가한 타입을 제공해요. 단, 함수, 참조형, 또는 이미 해당 한정자를 가진 타입에는 아무런 변화가 없어요.

출처: cppreference

본문

<type_traits> 헤더에 정의됨
template < class T > struct add_cv ; (1) (since C++11)
template < class T > struct add_const ; (2) (since C++11)
template < class T > struct add_volatile ; (3) (since C++11)

멤버 typedef typeT와 동일하되, cv 한정자가 추가된 타입이에요. 단, T가 함수, 참조형, 또는 이미 해당 cv 한정자를 가지고 있다면 그대로예요.

이 페이지에 설명된 템플릿 중 하나라도 프로그램에서 특수화하면 동작이 정의되지 않아요.

멤버 타입 (Member types)

이름 정의
type cv 한정자가 추가된 타입 T

헬퍼 타입 (Helper types)

template < class T > using add_cv_t = typename add_cv < T >:: type ; (since C++14)
template < class T > using add_const_t = typename add_const < T >:: type ; (since C++14)
template < class T > using add_volatile_t = typename add_volatile < T >:: type ; (since C++14)

가능한 구현 (Possible implementation)

template < class T > struct add_cv { typedef const volatile T type ; }; template < class T > struct add_const { typedef const T type ; }; template < class T > struct add_volatile { typedef volatile T type ; };

참고 (Notes)

이 변환 특성들은 템플릿 인자 추론에서 비연역 문맥(non-deduced contexts)을 만드는 데 사용할 수 있어요.

template<class T>
void f(const T&, const T&);

template<class T>
void g(const T&, std::add_const_t<T>&);

f(4.2, 0); // error, deduced conflicting types for 'T'
g(4.2, 0); // OK, calls g<double>

예제 (Example)

다음 예제는 각 cv 한정자에 따라 다른 오버로드가 선택되는 것을 보여줘요.

#include <iostream>
#include <type_traits>

struct foo
{
    void m() { std::cout << "Non-cv\n"; }
    void m() const { std::cout << "Const\n"; }
    void m() volatile { std::cout << "Volatile\n"; }
    void m() const volatile { std::cout << "Const-volatile\n"; }
};

int main()
{
    foo{}.m();
    std::add_const<foo>::type{}.m();
    std::add_volatile<foo>::type{}.m();
    std::add_cv<foo>::type{}.m();
}

출력:

Non-cv
Const
Volatile
Const-volatile

같이 보기 (See also)

is_const (C++11) 타입이 const 한정자인지 확인해요 (클래스 템플릿) [edit]
is_volatile (C++11) 타입이 volatile 한정자인지 확인해요 (클래스 템플릿) [edit]
remove_cv remove_const remove_volatile (C++11) (C++11) (C++11) 주어진 타입에서 const 및/또는 volatile 한정자를 제거해요 (클래스 템플릿) [edit]
as_const (C++17) 인자에 대한 const 참조를 얻어요 (함수 템플릿) [edit]
ranges::as_const_view views::as_const (C++23) 뷰를 constant_range로 변환해요 (클래스 템플릿) (range adaptor object) [edit]
add_cv add_const add_volatile (C++26) (C++26) (C++26) 반영된 타입에 const 및/또는 volatile 한정자를 추가해요 (함수) [edit]

더 알아보기 (Learn more)

cppreference