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 type는 T와 동일하되, 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] |