编译时常量和运行时常量
constexpr:编译时常量,在编译期就可以算出来。
const? : const并未区分出编译期常量和运行期常量,它限定一个变量不允许被改(但这个东西仍然可能是个动态变量,如做函数参数)。在大多数情况下,const描述的是运行时常量性。
constexpr int getconst() {
?? ?return 2;
};
void cofunc() {
?? ?int arr[getconst()] = {0};
};
常量表达式主要是允许一些计算发生在编译时,即发生在代码编译阶段而不是代码运行阶段。这是很大的优化,因为如果有些事情可以在编译时做,那么它只会做一次,而不是每次程序运行时都计算。?
常量表达式函数
要求:
- 函数中只能有一条return语句
- 函数必须有返回值(不能是void)
- 在使用前必须定义
- return返回语句表达式中不能使用非常量表达式的函数、全局数据。只能是一个常量表达式
constexpr int getvalue() {
return 2;
}
int main()
{
constexpr int prc = getvalue();
return 0;
}
常量表达式值
constexpr int pc = 1;
c++11,?constexpr关键字不能用于修饰自定义类型的定义。
?对于自定义的数据类型,要想成为常量表达式值的时候,需要自定义常量构造函数,只需在构造函数前加上constexpr关键字。
??//1、函数体必须为空
?//2、有成员变量,必须要初始化
?//3、初始化列表只能由常量
class ConstexprClass
{
public:
constexpr ConstexprClass(int x) :i(x) {}
int i;
};
int main()
{
constexpr ConstexprClass expr(1);
return 1;
}
|