c++ - 什么是 C++ 中的标量对象?

标签 c++ types theory

据我了解,基本类型是标量,而数组是聚合的,但用户定义的类型呢?我会根据什么标准将它们分为两类?

struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;

最佳答案

短版: C++ 中的类型有:

  • 对象类型:标量、数组、类、 union

  • 引用类型

  • 函数类型

  • (成员类型)[见下文]

  • void


加长版

  • 对象类型

    • 标量

      1. 算术(整数、 float )

      2. 指针:T *对于任何类型T

      3. 枚举

      4. 指向成员的指针

      5. nullptr_t

    • 数组:T[]T[N]对于任何完整的非引用类型T

    • 类:class Foostruct Bar

      1. 琐碎的类

      2. 聚合

      3. POD 类

      4. (等等等等)

    • union :union Zip

  • 引用类型:T & , T &&对于任何对象或自由函数类型T

  • 函数类型

    • 免费功能:R foo(Arg1, Arg2, ...)

    • 成员(member)功能:R T::foo(Arg1, Arg2, ...)

  • void

成员类型是这样工作的。成员类型的格式为 T::U ,但不能有成员类型的对象或变量。您只能拥有成员指针。成员指针的类型为 T::* U , 如果 U 则它是一个指向成员对象的指针是(自由)对象类型,如果 U 则为指向成员函数的指针是一个(免费的)函数类型。

除了 void 之外的所有类型都是完整的, unsized 数组和声明但未定义的类和 union 。除 void 外的所有不完整类型可以完成。

所有类型都可以是const/volatile合格。

<type_traits> header 提供了 trait 类来检查这些类型特征中的每一个。

关于c++ - 什么是 C++ 中的标量对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14821936/

相关文章:

c++ - Allegro5 和 MS Visual Studio 2010

c++ - 很难确定 std::map 的正确值类型

Scala从集合中收集类型的项目

java - Java 是正交的吗?

assembly - 汇编器是如何工作的/它是如何编写的?

ssl - 当您在表格中输入数据时,它是加密的吗?

c++ - 标准草案中提到的零长度数组是什么?

c++ - 使用 boost 的字符串和函数映射给出编译错误

c++ - 使用 std::unique_ptr 管理 COM 对象

MySQL:我应该为逗号分隔值的字符串使用什么数据类型?