C++使用 const 将变量声明为常量

C++使用 const 将变量声明为常量

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

const type-name constant-name = value;

来看一个简单的应用程序,它显示常量 pi 的值,如下所示:

#include 

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

分析:

请注意常量 pi 的声明(第 7 行)。这里使用了关键字 const 来告诉编译器, pi 是一个类型为 double 的常量。第 11 行试图给一个常量赋值,如果取消对该行的注释,将出现编译错误,指出不能给常量赋值。因此,常量是一种确保某些数据不能修改的强大方式。

注意:

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

声明在编译期间长度固定的静态数组时,常量很有用。如下程序提供了一个示例,演示了如何使用 int 常量指定数组长度:

#include 
using namespace std;

int main()
{
    const int ARRAY_LENGTH = 5;

    // Array of 5 integers, initialized using a const
    int myNumbers [ARRAY_LENGTH] = {5, 10, 0, -101, 20};

    cout << "Enter index of the element to be changed: ";
    int elementIndex = 0;
    cin >> elementIndex;

    cout << "Enter new value: ";
    int newValue = 0;
    cin >> newValue;

    myNumbers[elementIndex] = newValue;

    cout << "Element " << elementIndex << " in array myNumbers is: ";
    cout << myNumbers[elementIndex] << endl;

    return 0;
}

输出:

Enter index of the element to be changed: 3
Enter new value: 101
Element 3 in array myNumbers is: 101

分析:

数组的长度必须是整数,为此,可使用常量来指定(如第 6 行的 ARRAY_LENGTH)。因此,数组 myNumbers 被声明为包含 5 个元素。第 11~17 行询问用户要修改哪个数组元素以及要在这个元素中存储什么样的新值。第 19 行演示了如何修改数组的特定元素,而第 21~22 行演示了如何访问数组的特定元素。请注意,修改改索引为 3 的元素时,实际修改的是第 4 个元素,因为索引从零开始,您必须习惯这一点。

注意:

在数组包含 5 个 int 元素时,很多 C++新手将第 5 个值赋给索引为 5 的元素。这超出了数组的边界,因为编译后的代码将试图访问数组的第 6 个元素,这不在定义的范围内。这种错误被称为篱笆柱( fence-post)错误。之所以叫这个名字,是因为建造篱笆时,需要的篱笆柱数总是比区段( section)数多 1。

警告:

程序遗漏了一些必不可少的代码:没有检查用户输入的索引是否在数组的边界内。实际上,该程序应检查 elementIndex 是否为 0~4(对于数组 myNumbers),如果不是,则拒绝修改数组。由于缺少这种检查,用户将被允许输入超越数组边界的值。在最糟糕的情况下,这将导致应用程序崩溃。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

你可能感兴趣的:(C++编程基础,c++)