const变量
到目前为止,all of the变量我们看见have been非常-那是,他们可以在任何时间改变了收益。例如:
1
2
int x { 4 }; // initialize x with the value of 4
x = 5; // change value of x to 5
然而,它有时是有用的,以确定变量的值,不能改变。举例来说,考虑地球重力的值:9.8米/秒2。这是不可能改变任何时间很快。定义这个值作为一个常量,有助于确保这个值不会意外地改变。
做一个变量不变,只是把const关键字之前或之后的变量类型,像这样:
2
const double gravity { 9.8 }; // preferred use of const before type
int const sidesInSquare { 4 }; // okay, but not preferred
虽然C++会接受之前或之后的类型const,我们推荐使用它之前,因为它更好的遵循标准式英语惯例在修饰符来之前被修改的对象(例如一个绿球,一球未绿色)。
const变量必须初始化,当你定义它们,然后,价值无法通过改变分配。
声明一个变量为const阻止我们无意中改变它的值:
1
2
const double gravity { 9.8 };
gravity = 9.9; // not allowed, this will cause a compile error
将函数参数常量做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
constexpr
C++实际上有两种不同的常数。运行时常量的初始化值只能在运行时(如变量usersage和自我价值以上)。编译时常量的初始化值可以在编译时(如变量的重力)来解决。在大多数情况下,它不重要,无论是一个常量值是运行时或编译时间。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为一个常量的值可以是运行时或编译时,编译器必须了解哪一种常数是。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量: