使常数必须是编译时常量!

将函数参数常量做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
constexpr
C++实际上有两种不同的常数。运行时常量的初始化值只能在运行时(如变量usersage和自我价值以上)。编译时常量的初始化值可以在编译时(如变量的重力)来解决。在大多数情况下,它不重要,无论是一个常量值是运行时或编译时间。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为一个常量的值可以是运行时或编译时,编译器必须了解哪一种常数是。

有助于消除这一情况,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

将函数参数常量做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。
constexpr
C++实际上有两种不同的常数。运行时常量的初始化值只能在运行时(如变量usersage和自我价值以上)。编译时常量的初始化值可以在编译时(如变量的重力)来解决。在大多数情况下,它不重要,无论是一个常量值是运行时或编译时间。然而,有一些奇怪的情况下,C++需要编译而不是运行时常数时间(如定义一个固定大小的数组的长度,我们将稍后)。因为一个常量的值可以是运行时或编译时,编译器必须了解哪一种常数是。
有助于消除这一情况,C++ 11引入了新的关键字constexpr,使常数必须是编译时常量:

1
2
3
4
5
6
7
8
9
10
11
12
#ifndef CONSTANTS_H
#define CONSTANTS_H
 
// define your own namespace to hold constants
namespace constants
{
    const double pi(3.14159);
    const double avogadro(6.0221413e23);
    const double my_gravity(9.2); // m/s^2 -- gravity is light on this planet
    // ... other related constants
}
#endif


当你编译你的代码,处理器取代max_students_per_class所有实例的文本值30,然后编译成可执行文件。
你可能会同意,这是更直观的比使用一个神奇的数字为夫妇的原因。max_students_per_class提供上下文是什么程序正在尝试去做的,即使没有评论。其次,如果最大学生每教室数量变化,我们只需要在一个地方改变max_students_per_class的价值,和max_students_per_class所有实例将在下次编译的新的文学价值所取代。
考虑到我们的第二个例子,使用#定义符号常量:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值