1 字面值类型
C++中把一般都比较简单,值也显而易见、容易得到的类型称作“字面值类型”。例如,算术类型、引用和指针都属于字面值类型。
2 字面值常量类
2.1 聚合类与字面值常量类
数据成员都是字面值类型的聚合类是字面值常量类。
class myClass
{
public:
int i;
char ch;
};
其中,myClass是字面值常量类。关于聚合类的相关内容,请参考《C++中的聚合类》。
2.2 constexpr构造函数
字面值常量类必须至少提供一个 constexpr构造函数。关于constexpr函数的相关内容,请参考《C++中constexpr函数》https://blog.csdn.net/hou09tian/article/details/110470363
所以,myClass还需要有一个constexpr构造函数,该构造函数必须初始化所有的变量。
class myClass
{
public:
int i;
char ch;
constexpr myClass(int i, char ch) :i(i), ch(ch)
{
}
};
定义myClass类对象的代码为
myClass mc(1, 'a');
此时,编译器会把mc.i和mc.ch直接转换成1和’a’。
2.3 constexpr成员函数
字面值常量类也可以包含constexpr成员函数。为myClass类定义如下成员函数
constexpr int getI()
{
return i;
}
此时,编译器会将mc.getI()直接转换成1。