C ++中15种类型的分类是什么?

时间:2014-11-20 06:00:42

标签: c++ c++11 types classification categories

在Walter E. Brown的CppCon2014 conference talk期间,他表示标准中描述的C ++中有 15个类型类型。

“C ++类型宇宙的15个分区。”
无效就是其中之一。” - Walter E. Brown。

其他14个是什么?


在深入挖掘标准时,我发现了以下内容:

// 20.11.4.1
primary type categories:
template <class T> struct is_void;
template <class T> struct is_integral;
template <class T> struct is_floating_point;
template <class T> struct is_array;
template <class T> struct is_pointer;
template <class T> struct is_lvalue_reference;
template <class T> struct is_rvalue_reference;
template <class T> struct is_member_object_pointer;
template <class T> struct is_member_function_pointer;
template <class T> struct is_enum;
template <class T> struct is_union;
template <class T> struct is_class;
template <class T> struct is_function;

// 20.11.4.2 
composite type categories:
template <class T> struct is_reference;
template <class T> struct is_arithmetic;
template <class T> struct is_fundamental;
template <class T> struct is_object;
template <class T> struct is_scalar;
template <class T> struct is_compound;
template <class T> struct is_member_pointer;

嗯,那超过15.无论如何,这些都是类型特征。它们用于在编译时测试类型的某些属性。例如,integer类型会对is_integralis_fundamentalis_scalar返回true。也许这15个是上面列出的一些,其余的是其他的子类别。


这是我尝试制作该语言的类型树的尝试:

enter image description here

我的猜测:

 1.  void 
 2.  bool
 3.  char 
 4.  nullptr 
 5.  integral (signed) 
 6.  integral (unsigned) 
 7.  floating
 8.  enum 
 9.  array 
 10. class 
 11. union 
 12. lvalue reference 
 13. rvalue reference 
 14. member object pointer 
 15. member function pointer

但请注意,boolcharenum都是完整的类型,因此我对此列表并不十分自信。

1 个答案:

答案 0 :(得分:27)

我直接与沃尔特谈过,这只是一个错误的计算。

  

&#34;唉,此后不久我意识到我错了,因此   在谈话中犯了一个错误的错误:有14个(不是15个)   类型分类。请参阅主要类型类别列表   C ++标准中的[meta.unary.cat]子句中的谓词;这些   对应于为核心语言建立的分类   [basic.types]&#34。 --web

话虽如此,他们是:

template <class T> struct is_void;
template <class T> struct is_null_pointer; //<- arrived in C++11 (std::nullptr_t)
template <class T> struct is_integral;
template <class T> struct is_floating_point;
template <class T> struct is_array;
template <class T> struct is_pointer;
template <class T> struct is_lvalue_reference;
template <class T> struct is_rvalue_reference;
template <class T> struct is_member_object_pointer;
template <class T> struct is_member_function_pointer;
template <class T> struct is_enum;
template <class T> struct is_union;
template <class T> struct is_class;
template <class T> struct is_function;