std::remove_cv, std::remove_const, std::remove_volatile
Aus cppreference.com
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
definiert in Header <type_traits>
|
||
template< class T > struct remove_cv; |
(1) | (seit C++11) |
template< class T > struct remove_const; |
(2) | (seit C++11) |
template< class T > struct remove_volatile; |
(3) | (seit C++11) |
Provides the member typedef type
which is the same as T
, except that its topmost cv-qualifiers are removed.
1) removes the topmost const, the topmost volatile, or both, if present.
2) removes the topmost const
3) removes the topmost volatile
Inhaltsverzeichnis |
[Bearbeiten] Mitglied Typen
Name
Original: Name The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Definition |
type
|
the type T without cv-qualifier
|
[Bearbeiten] Mögliche Implementierung
template< class T > struct remove_cv { typedef typename std::remove_volatile<typename std::remove_const<T>::type>::type type; }; template< class T > struct remove_const { typedef T type; }; template< class T > struct remove_const<const T> { typedef T type; }; template< class T > struct remove_volatile { typedef T type; }; template< class T > struct remove_volatile<volatile T> { typedef T type; }; |
[Bearbeiten] Beispiel
Removing const/volatile from const volatile int * does not modify the type, because the pointer itself is neither const nor volatile.
#include <iostream> #include <type_traits> int main() { typedef std::remove_cv<const int>::type type1; typedef std::remove_cv<volatile int>::type type2; typedef std::remove_cv<const volatile int>::type type3; typedef std::remove_cv<const volatile int*>::type type4; typedef std::remove_cv<int * const volatile>::type type5; std::cout << "test1 " << (std::is_same<int, type1>::value ? "passed" : "failed") << '\n'; std::cout << "test2 " << (std::is_same<int, type2>::value ? "passed" : "failed") << '\n'; std::cout << "test3 " << (std::is_same<int, type3>::value ? "passed" : "failed") << '\n'; std::cout << "test4 " << (std::is_same<const volatile int*, type4>::value ? "passed" : "failed") << '\n'; std::cout << "test5 " << (std::is_same<int*, type5>::value ? "passed" : "failed") << '\n'; }
Output:
test1 passed test2 passed test3 passed test4 passed test5 passed
[Bearbeiten] Siehe auch
(C++11) |
prüft, ob ein Typ const qualifizierten Original: checks if a type is const-qualified The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (Klassen-Template) |
(C++11) |
prüft, ob ein Typ flüchtigen qualifiziert Original: checks if a type is volatile-qualified The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (Klassen-Template) |