gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:43:41 25 4
gpt4 key购买 nike

CppCon2014 conference talk 期间由 Walter E. Brown 撰写,他指出标准描述的 C++ 中有 15 种分类

“C++ 类型世界的 15 个分区。”
void就是其中之一。” ——沃尔特·E·布朗。

其他 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 个。无论如何,这些都是类型特征。它们用于在编译时测试类型的某些属性。例如,对于 is_integralis_fundamentalis_scalarinteger 类型会返回 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都是整数类型,所以我对这个列表真的不是很自信.

最佳答案

我直接与沃尔特交谈,这简直是误算了。

"Alas, I realized shortly thereafter that I'd miscounted and hence committed an off-by-one error during the talk: there are 14 (not 15) type classifications. See the list of primary type category predicates in clause [meta.unary.cat] in the C++ standard; these correspond to the classifications established for the core language in [basic.types]." --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;

关于c++ - C++中的15种类型分类是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27032790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com