La plantilla std::is_trivially_move_construtible de C++ STL está presente en el archivo de encabezado <type_traits> . La plantilla std::is_trivially_move_construtible de C++ STL se usa para verificar si la T se mueve trivialmente o no. Devuelve el valor booleano verdadero si T es un tipo construible de movimiento trivial; de lo contrario, devuelve falso.
Archivo de cabecera:
#include<type_traits>
Clase de plantilla:
template< class T > struct is_trivially_move_constructible;
Sintaxis:
std::is_trivially_move_constructible<T>::value
Parámetro: la plantilla std::is_trivially_move_construcible acepta un solo parámetro T (clase de rasgo) para verificar si T es un tipo construible de movimiento trivial o no.
Valor devuelto: la plantilla std::is_trivially_move_construcible devuelve una variable booleana como se muestra a continuación:
- Verdadero: si el tipo T es un construible de movimiento trivial.
- Falso: si el tipo T no es un construible de movimiento trivial.
A continuación se muestra el programa para demostrar std::is_trivially_move_construcible en C++:
Programa 1:
// C++ program to demonstrate // std::is_trivially_move_constructible #include <iostream> #include <type_traits> using namespace std; // Declaration of classes class A { }; class B { B() {} }; enum class C : int { x, y, z }; class D { int v1; double v2; public: D(int n) : v1(n), v2() { } D(int n, double f) noexcept : v1(n), v2(f) {} }; int main() { cout << boolalpha; // Check if int is trivially // move constructible or not cout << "int: " << is_trivially_move_constructible<int>::value << endl; // Check if class A is trivially // move constructible or not cout << "class A: " << is_trivially_move_constructible<A>::value << endl; // Check if class B is trivially // move constructible or not cout << "class B: " << is_trivially_move_constructible<B>::value << endl; // Check if enum class C is trivially // move constructible or not cout << "enum class C: " << is_trivially_move_constructible<C>::value << endl; // Check if class D is trivially // move constructible or not std::cout << "class D: " << is_trivially_move_constructible<D>::value << endl; return 0; }
int: true class A: true class B: true enum class C: true class D: true
Programa 2:
// C++ program to demonstrate // std::is_trivially_move_constructible #include <iostream> #include <type_traits> using namespace std; // Declare structures struct Ex1 { Ex1() {} Ex1(Ex1&&) { cout << "Throwing move constructor!"; } Ex1(const Ex1&) { cout << "Throwing copy constructor!"; } }; struct Ex2 { Ex2() {} Ex2(Ex2&&) noexcept { cout << "Non-throwing move constructor!"; } Ex2(const Ex2&) noexcept { cout << "Non-throwing copy constructor!"; } }; // Driver Code int main() { cout << boolalpha; // Check if struct Ex1 is move // constructible or not cout << "Ex1 is move-constructible? " << is_move_constructible<Ex1>::value << '\n'; // Check if struct Ex1 is trivially // move constructible or not cout << "Ex1 is trivially move-constructible? " << is_trivially_move_constructible<Ex1>::value << '\n'; // Check if struct Ex2 is trivially // move constructible or not cout << "Ex2 is trivially move-constructible? " << is_trivially_move_constructible<Ex2>::value << '\n'; }
Ex1 is move-constructible? true Ex1 is trivially move-constructible? false Ex2 is trivially move-constructible? false
Referencia: http://www.cplusplus.com/reference/type_traits/is_trivially_move_construtible/
Publicación traducida automáticamente
Artículo escrito por bansal_rtk_ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA