函数参数const做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
编译时间与运行时间
当你在编译程序的过程中,这就是编译时间。在编译时,编译器可以确保你的代码语法正确,并将你的代码转换成目标文件。
在运行应用程序的过程中,这就是运行时。运行时,程序按行执行。
constexpr
C++实际上有两种不同的常数。
运行时常量是那些初始化值只能在运行时解决的程序(当程序运行时)。变量如usersage和自我价值以上运行时常量,因为编译器在编译时不能确定自己的价值观。usersage依靠用户输入(只能在运行时)和自我价值取决于传递给函数的值(这是在运行时才知道)。
编译时常量是那些可以在编译时解决的初始化值(当程序编译时)。可变重力以上的编译时间常数的例子。每当使用重力时,编译器可以简单地替换标识符重力为字面双9.8。
在大多数情况下,常量值是运行时间还是编译时间都不重要。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为const值可以是运行时或编译时,编译器必须跟踪它是哪种常量。
函数参数const做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
编译时间与运行时间
当你在编译程序的过程中,这就是编译时间。在编译时,编译器可以确保你的代码语法正确,并将你的代码转换成目标文件。
在运行应用程序的过程中,这就是运行时。运行时,程序按行执行。
constexpr
C++实际上有两种不同的常数。
运行时常量是那些初始化值只能在运行时解决的程序(当程序运行时)。变量如usersage和自我价值以上运行时常量,因为编译器在编译时不能确定自己的价值观。usersage依靠用户输入(只能在运行时)和自我价值取决于传递给函数的值(这是在运行时才知道)。
编译时常量是那些可以在编译时解决的初始化值(当程序编译时)。可变重力以上的编译时间常数的例子。每当使用重力时,编译器可以简单地替换标识符重力为字面双9.8。
在大多数情况下,常量值是运行时间还是编译时间都不重要。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为const值可以是运行时或编译时,编译器必须跟踪它是哪种常量。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量:
编译时间与运行时间
当你在编译程序的过程中,这就是编译时间。在编译时,编译器可以确保你的代码语法正确,并将你的代码转换成目标文件。
在运行应用程序的过程中,这就是运行时。运行时,程序按行执行。
constexpr
C++实际上有两种不同的常数。
运行时常量是那些初始化值只能在运行时解决的程序(当程序运行时)。变量如usersage和自我价值以上运行时常量,因为编译器在编译时不能确定自己的价值观。usersage依靠用户输入(只能在运行时)和自我价值取决于传递给函数的值(这是在运行时才知道)。
编译时常量是那些可以在编译时解决的初始化值(当程序编译时)。可变重力以上的编译时间常数的例子。每当使用重力时,编译器可以简单地替换标识符重力为字面双9.8。
在大多数情况下,常量值是运行时间还是编译时间都不重要。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为const值可以是运行时或编译时,编译器必须跟踪它是哪种常量。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量:
constexpr double gravity (9.8); // ok, the value of 9.8 can be resolved at compile-time
constexpr int sum = 4 + 5; // ok, the value of 4 + 5 can be resolved at compile-time
std::cout << "Enter your age: ";
int age;
std::cin >> age;
constexpr int myAge = age; // not okay, age can not be resolved at compile-time
函数参数const做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
编译时间与运行时间
当你在编译程序的过程中,这就是编译时间。在编译时,编译器可以确保你的代码语法正确,并将你的代码转换成目标文件。
在运行应用程序的过程中,这就是运行时。运行时,程序按行执行。
constexpr
C++实际上有两种不同的常数。
运行时常量是那些初始化值只能在运行时解决的程序(当程序运行时)。变量如usersage和自我价值以上运行时常量,因为编译器在编译时不能确定自己的价值观。usersage依靠用户输入(只能在运行时)和自我价值取决于传递给函数的值(这是在运行时才知道)。
编译时常量是那些可以在编译时解决的初始化值(当程序编译时)。可变重力以上的编译时间常数的例子。每当使用重力时,编译器可以简单地替换标识符重力为字面双9.8。
在大多数情况下,常量值是运行时间还是编译时间都不重要。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为const值可以是运行时或编译时,编译器必须跟踪它是哪种常量。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量: