std::is_trivially_destructible 判断一个类型是否是一个平凡的可销毁类型

C++ 11知识点:std::is_trivially_destructible

简介

判断一个类型T是否是一个平凡的可销毁类型(trivivally destructible)。主要用于检查这个类型的析构函数。
一个trivivally destructible类(由class,struct/union)这样定义:

  • uses the implicitly defined destructor.
  • the destructor is not virtual.
  • its base class and non-static data members (if any) are themselves also trivially destructible types.

class template声明

#include <type_traits>

template <class T> struct is_trivially_destructible;

is_trivially_destructible 内部继承integral_constant作为true_type或false_type,依赖于T是否是trivivally destructible。

示例

// is_trivially_destructible example
#include <iostream>
#include <type_traits>

struct A { }; /* 符合trivivally destructible类型定义 */
struct B { ~B(){} }; /* 没有使用隐式应答的析构函数, 即编译器合成的默认析构函数, 因此不是trivivally destructible类型 */

int main() {
  std::cout << std::boolalpha; /* 将输出流bool解析为true/false, 而不是1/0 */
  std::cout << "is_trivially_destructible:" << std::endl;
  std::cout << "int: " << std::is_trivially_destructible<int>::value << std::endl; /* 基本类型是trivivally destructible类型 */
  std::cout << "A: " << std::is_trivially_destructible<A>::value << std::endl; /* A是trivivally destructible类型 */
  std::cout << "B: " << std::is_trivially_destructible<B>::value << std::endl; /* B不是trivivally destructible类型 */
  return 0;
}

输出:

is_trivially_destructible:
int: true
A: true
B: false

类似的类模板还有

  • is_constructible 判断一个类型是不是可以用指定参数集构造的类型
  • is_trivial 判断一个类型是否是一个平凡的类型
  • is_trivially_constructible 判断一个类型是否是可以用指定参数集构造的平凡的可构造类型
  • is_nothrow_destructible 判断一个类型是否是可析构类型,并且不抛出任何异常

参考

http://www.cplusplus.com/reference/type_traits/is_trivially_destructible/

posted @ 2022-05-02 17:51  明明1109  阅读(1317)  评论(0编辑  收藏  举报