天天看点

聚合类,字面值类型,constexpr函数

聚合类

聚合类使得用户可以直接访问其成员,当一个类满足如下条件时,我们说它是聚合的:

  • 所有成员都是public的。
  • 没有定义任何构造函数
  • 没有类内初始值
  • 没有基类,也没有virtual函数。

例如:下面的类是一个聚合类:

struct Data{
    int ival;
    string s;
};
           

字面值类型

字面值类型包括:算数类型(char , bool , int 等等),引用和指针,以及字面值常量类。自定义类Sales_item、IO库、string类型则不属于字面值类型。

constexpr函数

constexpr函数是指能用于常量表达式的函数。定义constexpr函数的方法和其他函数类似,不过要遵循几项约定:函数的返回类型及所有形参都是字面值类型,而且函数中必须有且只有一条return语句:

constexpr int new_size()
{ 
    return ; 
}
constexpr int foo = new_sz(); //正确:foo是一个常量表达式
           

我们把new_sz定义成无参数的constexpr函数。因为编译器能在程序编译时验证new_sz函数返回的是常量表达式,所以可以用new_sz函数初始化constexpr类型的变量foo。

执行该初始化任务时,编译器把对constexpr函数的调用替换成其结果值。为了能在编译过程中随时展开,constexpr函数被隐式地指定为内联函数。

参考:C++primer第五版