然而,它有时是有用的,以确定变量的值,不能改变。例如,考虑在地球的重力值:9.8米/秒2。这是不可能改变任何时间很快。定义这个值作为一个常量有助于确保这个值不是意外更改的。
虽然C++会接受之前或之后的类型const,我们推荐使用它之前,因为它更好的遵循标准式英语惯例在修饰符来之前被修改的对象(例如一个绿球,一球未绿色)。
const变量必须初始化,当你定义它们,然后,价值无法通过改变分配。
声明一个变量为const阻止我们无意中改变它的值:
将函数参数常量做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
编译时间和运行时
当你在编译你的程序的过程中,这被称为编译时间。在编译时,编译器可以确保你的代码语法正确,并将你的代码转换成目标文件。
当你在运行你的应用程序的过程中,被称为运行时。在运行时,您的程序按行执行。
Constexpr
C++实际上有两种不同的常数。
运行时常量是那些初始化值只能在运行时解析的(当你的程序正在运行的时候)。变量如usersage和自我价值以上运行时常量,因为编译器在编译时不能确定自己的价值观。usersage依靠用户输入(只能在运行时)和自我价值取决于传递给函数的值(这是在运行时才知道)。
编译时间常数是那些在编译时可以在编译时解决的初始化值(当你的程序在编译时)。上面的变量重力是一个编译时常数的例子。每当使用重力时,编译器可以简单地用“双9.8”的标识符重来替换“标识符”。
在大多数情况下,一个恒定值是否运行时或编译时间都不重要。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为一个常量的值可以是运行时或编译时,编译器必须了解哪一种常数是。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量:
做一个变量不变,只是把const关键字之前或之后的变量类型,像这样:
1
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
3
4
5
std::cout << "Enter your age: ";
int age;
std::cin >> age;
const int usersAge (age); // usersAge can not be changed
将函数参数常量做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
编译时间和运行时
当你在编译你的程序的过程中,这被称为编译时间。在编译时,编译器可以确保你的代码语法正确,并将你的代码转换成目标文件。
当你在运行你的应用程序的过程中,被称为运行时。在运行时,您的程序按行执行。
Constexpr
C++实际上有两种不同的常数。
运行时常量是那些初始化值只能在运行时解析的(当你的程序正在运行的时候)。变量如usersage和自我价值以上运行时常量,因为编译器在编译时不能确定自己的价值观。usersage依靠用户输入(只能在运行时)和自我价值取决于传递给函数的值(这是在运行时才知道)。
编译时间常数是那些在编译时可以在编译时解决的初始化值(当你的程序在编译时)。上面的变量重力是一个编译时常数的例子。每当使用重力时,编译器可以简单地用“双9.8”的标识符重来替换“标识符”。
在大多数情况下,一个恒定值是否运行时或编译时间都不重要。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为一个常量的值可以是运行时或编译时,编译器必须了解哪一种常数是。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量: