• C++ const用法详解

    我们知道,在程序运行时不会更改的值可以作为常数存储。但是,有时这种做法并不是很理想。例如,假设以下语句出现在计算有关贷款数据的银行程序中:

    amount = balance * 0.069;

    在这个程序中,出现了两个潜在的问题。首先,除原始程序员以外的任何人都不清楚这个 0.069 是什么东西。它看起来似乎是一个利率,但在某些情况下,又可以是与贷款支付相关的费用。如果不仔细检查程序的其余部分,怎样才能确定该语句的目的呢?

    如果在整个程序中还有其他的计算公式也使用了此数字,并且必须定期更改,则会出现第二个问题。假设这个数字是利率,那么如果利率从 6.9% 变为 7.2% 该怎么办呢?程序员将不得不搜索全部源代码,以查找每一次出现的该数字。

    通过使用命名常量可以解决这两个问题。命名常量也称为常量变量,就像是一个变量,但其内容是只读的,在程序运行时不能更改。以下是一个命名常量的定义:

    const double INTEREST_RATE = 0.069;

    除了 const 出现在数据类型名称之前,它看起来就像一个常规的变量定义。关键字 const 是一个限定符,它告诉编译器将该变量设置为只读。这样可以确保在整个程序执行过程中其值保持不变。如果程序中的任何语句尝试更改其值,则在编译程序时会导致错误。

    命名常量可以有任何合法的 C++ 标识符名称,但是许多程序员会在其名称中全部使用大写字母,将其与常规变量区分开来。上述示例中的 INTERESTJRATE 正是如此。

    在定义一个命名常量时,必须用一个值来进行初始化。它不能先定义,然后再通过赋值语句来进行赋值:

    const double INTEREST_RATE; //非法
    INTEREST_RATE = 0.069;  //非法

    使用命名常量还有一个附带的好处,那就是它们使程序更具有自我解释的能力。一旦命名常量 INTEREST_RATE 被正确定义,那么以下程序语句:

    newAmount = balance * 0.069;

    就可以改为以下语句:

    newAmount = balance * INTEREST_RATE;

    现在新程序员可以轻松阅读第2个语句并更好地理解其中含义。显然,与 balance 变量相乘的正是利率。

    这种方法的另一个优点是可以很容易地对程序进行广泛的改变。例如,假设整个程序在十几个不同语句中均出现过利率,这时要修改利率,则只要修改命名常量定义中的初始化值就可以了,这也是唯一需要修改的地方。如果利率上升到 7.2%,则可以简单地将定义修改如下:

    const double INTEREST_RATE = 0.072;

    然后该程序就可以重新编译。每个使用 INTEREST_RATE 的语句都将使用新值。

    命名常量也可以帮助防止程序代码中的键入错误。例如,假设在执行各种几何计算的程序中使用数字 3.14159 作为 PI 的值。每次在程序代码中输入数字 3.14159 时,都可能会出现一个或多个数字的错误。为了帮助防止这种错误,可以为 PI 定义一个命名常量,使用正确的值初始化,然后在需要其值的所有公式中使用该常量。

    下面的程序在计算圆面积时就使用了命名常量。它在第 9 行定义了 PI 常量,然后在第 17 行使用了它:

    //This program calculates the area of a circle. The formula for the
    // area of a circle is PI times the radius squared. PI is 3.14159.
    #include <iostream>
    #include <cmath>    // Needed for the pow function
    using namespace std;
    
    int main()
    {
        const double PI = 3.14159; // PI is a named constant
        double area, radius;
        cout << "This program calculates the area of a circle.\n";
       
        // Get the radius 
        cout << "What is the radius of the circle? ";
        cin >> radius;
        // Compute and display the area
        area = PI * pow(radius, 2);
        cout << "The area is " << area << endl;
        return 0;
    }

    程序输出结果:

    This program calculates the area of a circle.
    What is the radius of the circle? 10.0
    The area is 314.159

更多...

加载中...