Bagikan melalui


<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.
Kerusakan 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
Hubungannya
disjunction
negasi

Baca juga

<Fungsional>