<type_traits>
Menentukan templat untuk konstanta waktu kompilasi yang memberikan informasi tentang properti argumen jenisnya, atau menghasilkan jenis yang diubah.
Sintaks
#include <type_traits>
Keterangan
Kelas dan templat dalam <type_traits> digunakan untuk mendukung inferensi jenis, klasifikasi, dan transformasi pada waktu kompilasi. Mereka juga digunakan untuk mendeteksi kesalahan terkait jenis, dan untuk membantu Anda mengoptimalkan kode generik Anda. Sifat jenis unary menjelaskan properti jenis, sifat jenis biner menggambarkan hubungan antara jenis, dan sifat transformasi memodifikasi properti jenis.
Kelas pembantu integral_constant
dan spesialisasi true_type
templatnya dan false_type
membentuk kelas dasar untuk predikat jenis. Predikat jenis adalah templat yang mengambil satu atau beberapa argumen jenis. Ketika predikat jenis memegang true, predikat tersebut diturunkan secara publik, secara langsung atau tidak langsung, dari true_type. Ketika predikat jenis memegang false, predikat tersebut diturunkan secara publik, secara langsung atau tidak langsung, dari false_type.
Pengubah jenis atau sifat transformasi adalah templat yang mengambil satu atau beberapa argumen templat dan memiliki satu anggota, type
, yang merupakan sinonim untuk jenis yang dimodifikasi.
Templat Alias
Untuk menyederhanakan ekspresi sifat jenis, templat alias untuk typename some_trait<T>::type
disediakan, di mana some_trait adalah nama templat kelas. Misalnya, add_const memiliki templat alias untuk jenisnya, add_const_t
, didefinisikan sebagai:
template <class T>
using add_const_t = typename add_const<T>::type;
Ini adalah alias yang disediakan untuk type
anggota:
add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t
\
common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t
\
remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t
\
Kelas
Kelas pembantu dan typedefs
Nama | Deskripsi |
---|---|
integral_constant | Membuat konstanta integral dari jenis dan nilai. |
true_type | Menyimpan konstanta integral dengan nilai benar. |
false_type | Menyimpan konstanta integral dengan nilai palsu. |
Kategori jenis utama
Nama | Deskripsi |
---|---|
is_void | Menguji apakah jenisnya adalah void . |
is_null_pointer | Menguji apakah jenisnya adalah std::nullptr_t . |
is_integral | Menguji apakah jenisnya integral. |
is_floating_point | Menguji apakah jenisnya adalah floating-point. |
is_array | Menguji apakah jenisnya adalah array. |
is_pointer | Menguji apakah jenisnya adalah penunjuk. |
is_lvalue_reference | Menguji apakah jenis adalah referensi lvalue. |
is_rvalue_reference | Menguji apakah jenis adalah referensi rvalue. |
is_member_object_pointer | Menguji apakah jenis tersebut adalah penunjuk ke objek anggota. |
is_member_function_pointer | Menguji apakah jenis tersebut adalah penunjuk ke fungsi anggota. |
is_enum | Menguji apakah jenisnya adalah enumerasi. |
is_union | Menguji apakah jenisnya adalah serikat. |
is_class | Menguji apakah jenisnya adalah kelas. |
is_function | Menguji apakah jenis tersebut adalah jenis fungsi. |
Kategori jenis komposit
Nama | Deskripsi |
---|---|
is_reference | Menguji apakah jenis tersebut adalah referensi. |
is_arithmetic | Menguji apakah jenisnya aritmatika. |
is_fundamental | Menguji apakah jenisnya atau void aritmatika. |
is_object | Menguji apakah jenisnya adalah jenis objek. |
is_scalar | Menguji apakah jenisnya skalar. |
is_compound | Menguji apakah jenisnya tidak skalar. |
is_member_pointer | Menguji apakah jenis tersebut adalah penunjuk ke anggota. |
Properti jenis
Nama | Deskripsi |
---|---|
is_const | Menguji apakah jenisnya adalah const . |
is_volatile | Menguji apakah jenisnya adalah volatile . |
is_trivial | Menguji apakah jenisnya sepele. |
is_trivially_copyable | Menguji apakah jenisnya dapat disalin secara trivial. |
is_standard_layout | Menguji apakah jenis adalah jenis tata letak standar. |
is_pod | Menguji apakah jenisnya adalah POD. |
is_literal_type | Menguji apakah jenisnya dapat berupa constexpr variabel atau digunakan dalam constexpr fungsi. |
is_empty | Menguji apakah jenisnya adalah kelas kosong. |
is_polymorphic | Menguji apakah jenisnya adalah kelas polimorfik. |
is_abstract | Menguji apakah jenisnya adalah kelas abstrak. |
is_final | Menguji apakah jenisnya adalah jenis kelas yang ditandai final . |
is_aggregate | |
is_signed | Menguji apakah jenis tersebut adalah bilangan bulat yang ditandatangani. |
is_unsigned | Menguji apakah jenisnya adalah bilangan bulat yang tidak ditandatangani. |
is_constructible | Menguji apakah jenisnya dapat dibangun menggunakan jenis argumen yang ditentukan. |
is_default_constructible | Menguji apakah jenis memiliki konstruktor default. |
is_copy_constructible | Menguji apakah jenis memiliki konstruktor salinan. |
is_move_constructible | Menguji apakah jenis memiliki konstruktor pemindahan. |
is_assignable | Menguji apakah jenis pertama dapat diberi nilai dari jenis kedua. |
is_copy_assignable | Menguji apakah jenis dapat diberi nilai referensi const dari jenis tersebut. |
is_move_assignable | Menguji apakah jenis dapat diberi referensi rvalue dari jenis tersebut. |
is_swappable | |
is_swappable_with | |
is_destructible | Menguji apakah jenisnya dapat dilenyapkan. |
is_trivially_constructible | Menguji apakah jenis tidak menggunakan operasi non-sepele saat dibangun menggunakan jenis yang ditentukan. |
is_trivially_default_constructible | Menguji apakah jenis tidak menggunakan operasi non-sepele saat dibuat secara default. |
is_trivially_copy_constructible | Menguji apakah jenis tidak menggunakan operasi non-sepele saat salinan dibuat. |
is_trivially_move_constructible | Menguji apakah jenis tidak menggunakan operasi non-sepele saat pemindahan dibangun. |
is_trivially_assignable | Menguji apakah jenis dapat ditetapkan dan penugasan tidak menggunakan operasi non-sepele. |
is_trivially_copy_assignable | Menguji apakah jenisnya dapat disalin dan penugasan tidak menggunakan operasi non-sepele. |
is_trivially_move_assignable | Menguji apakah jenis pemindahan dapat ditetapkan dan penugasan tidak menggunakan operasi non-sepele. |
is_trivially_destructible | Menguji apakah jenisnya dapat dihancurkan dan destruktor tidak menggunakan operasi non-sepele. |
is_nothrow_constructible | Menguji apakah jenisnya dapat dibangun dan diketahui tidak melempar saat dibangun menggunakan jenis yang ditentukan. |
is_nothrow_default_constructible | Menguji apakah jenisnya adalah konstruksi default dan diketahui tidak melempar saat dibuat secara default. |
is_nothrow_copy_constructible | Menguji apakah jenisnya adalah copy constructible dan konstruktor salinan diketahui tidak melemparkan. |
is_nothrow_move_constructible | Menguji apakah jenisnya bergerak dapat dibangun dan konstruktor pemindahan diketahui tidak melemparkan. |
is_nothrow_assignable | Menguji apakah jenis dapat ditetapkan menggunakan jenis yang ditentukan dan penugasan diketahui tidak melemparkan. |
is_nothrow_copy_assignable | Menguji apakah jenisnya dapat disalin dan penugasan diketahui tidak melemparkan. |
is_nothrow_move_assignable | Menguji apakah jenis tersebut dapat ditugaskan dan penugasan diketahui tidak akan dilemparkan. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Menguji apakah jenisnya dapat dihancurkan dan destruktor diketahui tidak melemparkan. |
has_virtual_destructor |
Menguji apakah jenis memiliki destruktor virtual. |
has_unique_object_representations |
|
is_invocable | Menguji apakah jenis yang dapat dipanggil dapat dipanggil menggunakan jenis argumen yang ditentukan. Ditambahkan di C++17. |
is_invocable_r | Menguji apakah jenis yang dapat dipanggil dapat dipanggil menggunakan jenis argumen yang ditentukan dan hasilnya dapat dikonversi ke jenis yang ditentukan. Ditambahkan di C++17. |
is_nothrow_invocable | Menguji apakah jenis yang dapat dipanggil dapat dipanggil menggunakan jenis argumen yang ditentukan dan diketahui tidak melemparkan pengecualian. Ditambahkan di C++17. |
is_nothrow_invocable_r | Menguji apakah jenis yang dapat dipanggil dapat dipanggil menggunakan jenis argumen yang ditentukan dan diketahui tidak melemparkan pengecualian, dan hasilnya dapat dikonversi ke jenis yang ditentukan. Ditambahkan di C++17. |
Ketik kueri properti
Nama | Deskripsi |
---|---|
alignment_of | Mendapatkan perataan jenis. |
rank | Mendapatkan jumlah dimensi array. |
Sejauh | Mendapatkan jumlah elemen dalam dimensi array yang ditentukan. |
Relasi jenis
Nama | Deskripsi |
---|---|
is_same | Menguji apakah dua jenis sama. |
is_base_of | Menguji apakah satu jenis adalah dasar dari yang lain. |
is_convertible | Menguji apakah satu jenis dapat dikonversi ke jenis lainnya. |
Modifikasi const-volatil
Nama | Deskripsi |
---|---|
add_const | const Menghasilkan jenis dari jenis. |
add_volatile | volatile Menghasilkan jenis dari jenis. |
add_cv | const volatile Menghasilkan jenis dari jenis. |
remove_const | Menghasilkan jenis non-const dari jenis. |
remove_volatile | Menghasilkan jenis non-volatil dari jenis. |
remove_cv | Menghasilkan jenis non-volatil non-const dari jenis. |
Modifikasi referensi
Nama | Deskripsi |
---|---|
add_lvalue_reference | Menghasilkan referensi untuk mengetik dari jenis. |
add_rvalue_reference | Menghasilkan referensi rvalue untuk mengetik dari jenis |
remove_reference | Menghasilkan jenis non-referensi dari jenis. |
Tanda tangani modifikasi
Nama | Deskripsi |
---|---|
make_signed | Menghasilkan jenis jika ditandatangani, atau jenis terkecil yang ditandatangani lebih besar dari atau sama dengan ukuran untuk diketik. |
make_unsigned | Menghasilkan jenis jika tidak ditandatangani, atau jenis terkecil yang tidak ditandatangani lebih besar dari atau sama dengan ukuran dengan jenis. |
Modifikasi array
Nama | Deskripsi |
---|---|
remove_all_extents | Menghasilkan jenis non-array dari jenis array. |
remove_extent | Menghasilkan jenis elemen dari jenis array. |
Modifikasi pointer
Nama | Deskripsi |
---|---|
add_pointer | Menghasilkan pointer untuk mengetik dari jenis. |
remove_pointer | Menghasilkan jenis dari penunjuk ke jenis. |
Transformasi lainnya
Nama | Deskripsi |
---|---|
aligned_storage | Mengalokasikan memori yang tidak diinisialisasi untuk jenis yang selaras. |
aligned_union | Mengalokasikan memori yang tidak diinisialisasi untuk penyatuan yang selaras dengan konstruktor atau destruktor non-sepele. |
common_type | Menghasilkan jenis umum dari semua jenis paket parameter. |
Bersyarat | Jika kondisinya benar, menghasilkan jenis pertama yang ditentukan, jika tidak, jenis kedua yang ditentukan. |
busuk | Menghasilkan jenis seperti yang diteruskan oleh nilai. Membuat jenis non-referensi, non-const, atau non-volatil, atau membuat penunjuk ke jenis. |
enable_if | Jika kondisinya benar, menghasilkan jenis yang ditentukan, jika tidak, tidak ada jenis. |
invoke_result | Menentukan jenis pengembalian jenis yang dapat dipanggil yang mengambil jenis argumen yang ditentukan. Ditambahkan di C++17. |
result_of | Menentukan jenis pengembalian jenis yang dapat dipanggil yang mengambil jenis argumen yang ditentukan. Ditambahkan di C++14, tidak digunakan lagi di C++17. |
underlying_type | Menghasilkan jenis integral yang mendasar untuk jenis enumerasi. |
Sifat operator logis
Nama | Deskripsi |
---|---|
kata penghubung | |
disjunction | |
negasi |