简介

在程序设计中,常量(constant)是一种在程序运行期间无法改变的值。
C++包含2种常量:

  • Named constants(命名常量/符号常量):与标识符关联的常量值。
  • Literal constants(字面常量/字面量):不与标识符关联的常量值。

命名常量

C++有3种定义命名常量的方式:

  • 常量变量(首选)
  • 枚举常量

常量变量

初始化后不能改变值的变量,称为常量变量。
在许多情况下,定义一个常量是十分有用的。例如,定义圆周率的常量变量为3.14,定义地球重力为9.8等。

须知:类型限定符

限定符(全称为类型限定符)是应用于类型的关键字,用于修改该类型的行为方式。
用于声明常量变量的const,被称为const类型限定符(简称const限定符)。
从c++ 23开始,c++只有两个类型限定符:const和volatile。

声明const变量

在变量的数据类型旁边加上const关键字(const限定符),即可声明一个常量变量。
通常建议将const写在数据类型前面,更符合语序。

注意事项:
①. const变量必须在定义时初始化,不能通过赋值改变值。
②. const变量可以使用非常数值来初始化。

1
2
3
4
5
6
const double gravity = 9.8;  // ①
double const pi = 3.14;
const double pi_0 = pi; // ②
const int x; // error
x = 10;

const作为函数参数

函数形参可以通过const关键字成为常量。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

void printInt(const int x)
{
std::cout << x;
}

int main()
{
printInt(10);
return 0;
}

但通常,我们不会将函数的值形参设为const,因为值形参只是一个拷贝,无论如何都会在函数结束时被销毁,所以无需关心函数是否改变了值形参的值。
因此,不建议使用const作为值形参。

const作为函数返回值

函数的返回值可以是const;

  • 对于基本类型,返回类型的const限定符会被忽略。
  • 对于复合类型,按值返回const对象是个临时副本,无论如何都会被销毁,反而会阻碍编译器优化,导致性能降低。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>

    const int getAge()
    {
    return 22;
    }

    int main()
    {
    std::cout << getAge();
    return 0;
    }
    因此,按值返回时不建议使用const。

在多个文件中使用常量变量

在程序中,定义的命名常量通常需要在多个文件中被使用。
为了避免重复定义,可以在中心位置声明一次,而后在需要的地方使用即可。

字面量

字面量(字面常量,literal)是直接插入到代码中的值,它们的含义无法被重新定义。如5,3.14,true,’a’,’Hello World’等。
字面量类型