3.6 什么是常量

学如逆水行舟,不进则退

心似平原跑马,易放难收

3.6 什么是常量

定义常量后,就不能修改它的值。在 C++中,给常量赋值会导致编译错误。

在 C++中,常量类似于变量,只是不能修改。与变量一样,常量也占用内存空间,并使用名称标识为其预留的空间的地址,但不能覆盖该空间的内容。在 C++中,常量可以是:

• 字面常量;

• 使用关键字 const 声明的常量;

• 使用关键字 constexpr 声明的常量表达式( C++11 新增的);

• 使用关键字 enum 声明的枚举常量;

• 使用#define 定义的常量(已摒弃,不推荐)。

3.6.1 字面常量

字面常量可以是任何类型:布尔型、整型、字符串等。

bool b1 = true;
int i2 = 10;
string s3 = "Hello world";

从 C++14 起,您还可使用二进制字面量 。

int someNumber = 0b1010;

在 C++中,您还可定义自己的字面量,如温度 32.0_F(华氏)或 0.0_C(摄氏)、距离16_m(英里)或 10_km(公里)等。

3.6.2 使用 const 将变量声明为常量

从实用和编程的角度看,最重要的 C++常量类型是在变量类型前使用关键字 const 声明的。通用的声明方式类似于下面这样: const type-name constant-name = value;

声明一个名为 pi 的常量 ,代码如下

#include <iostream>

int main()
{
    using namespace std;

    const double pi = 22.0 / 7;
    cout << "The value of constant pi is: " << pi << endl;

    // Uncomment next line to view compile failure
    // pi = 345;

    return 0;
}

结果如下:

The value of constant pi is: 3.14286

**常量是一种确保某些数据不能修改的强大方式。 **

如果变量的值不应改变,就应将其声明为常量,这是一种良好的编程习惯。通过使用关键字 const,程序员可确保数据不变,避免应用程序无意间修改该常量。

在多位程序员合作开发时,这特别有用。

3.6.3 使用 constexpr 定义常量表达式

通过关键字 constexpr,可让常量声明像函数: constexpr double GetPi() {return 22.0 / 7;}

在一个常量表达式中,可使用另一个常量表达式: constexpr double TwicePi() {return 2 * GetPi();}

只要编译器能够从常量表达式计算出常量,就可在语句和表达式中可使用常量的地方使用它。

使用常量表达式来计算 pi 的值 ,代码如下:

#include <iostream>
constexpr double GetPi() { return 22.0 / 7; }
constexpr double TwicePi() { return 2 * GetPi(); }

int main()
{
    using namespace std;
    const double pi = 22.0 / 7;

    cout << "constant pi contains value " << pi << endl;
    cout << "constexpr GetPi() returns value " << GetPi() << endl;
    cout << "constexpr TwicePi() returns value " << TwicePi() << endl;

    return 0;
}

输出如下:

constant pi contains value 3.14286
constexpr GetPi() returns value 3.14286
constexpr TwicePi() returns value 6.28571

常量表达式必须包含简单的实现,并返回简单类型 。

**C++14 中,常量表达式可包含决策结构,如 if 和 switch 语句。 **

**在大多数流行的 C++编译器中,都通过常量 M_PI 提供了精度相当高的 pi 值,您可在程序中使用这个常量,但必须包含头文件。 **

3.6.4 枚举

在有些情况下,变量只能有一组特定的取值。

在这些情况下,需要定义这样一种变量,即其可能取值由您指定。

为此,可使用关键字 enum 来声明枚举。枚举由一组称为枚举量( emumerator)的常量组成。

例如彩虹:

enum RainbowColors
{
	Violet = 0,
	Indigo,
	Blue,
	Green,
	Yellow,
	Orange,
	Red
};

基本方位

enum CardinalDirections
{
	North,
	South,
	East,
	West
};

可使用枚举来指定变量的类型,这样声明的变量只能取指定的值。 例如:

RainbowColors MyFavoriteColor = Blue; // Initial value

这个变量只能取 RainbowColors中指定的值,而不能取其他值。

编译器将枚举量( Voilet 等)转换为整数,每个枚举量都比前一个大 1。您可以指定起始值,如果没有指定,编译器认为起始值为 0,因此 North 的值为 0。

如果愿意,还可通过初始化显式地给每个枚举量指定值。

使用枚举量指示基本方位 ,代码如下:

#include <iostream>
using namespace std;

enum CardinalDirections
{
    North = 25,
    South,
    East,
    West
};

int main()
{
    cout << "Displaying directions and their symbolic values" << endl;
    cout << "North: " << North << endl;
    cout << "South: " << South << endl;
    cout << "East: " << East << endl;
    cout << "West: " << West << endl;

    CardinalDirections windDirection = South;
    cout << "Variable windDirection = " << windDirection << endl;

    return 0;
}

输出为:

Displaying directions and their symbolic values
North: 25
South: 26
East: 27
West: 28
Variable windDirection = 26

3.6.5 使用#define 定义常量

编写新程序时,不要使用这种常量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值