当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

const传奇的中文翻译

    size=18:288c1261d6][b:288c1261d6][color=darkblue:288c1261d6]const传奇    [/color:288c1261d6][/b:288c1261d6][/size:288c1261d6]
    原文来自www.codeproject.com
    作者:Rahul Singh

    译者声明:有些地方按原文解释不通,译者根据自己的理解作了适当修改。如有不妥之处,请告知[email protected]或参考原文。

 

    [b:288c1261d6]简介[/b:288c1261d6]

    当我自己写程序需要用到const的时候,或者是读别人的代码碰到const的时候,我常常会停下来想一会儿。许多程序员从来不用const,理由是即使没用const他们也这么过来了。本文仅对const的用法稍作探讨,希望能够对提高软件的源代码质量有所帮助。

 

    [b:288c1261d6]常变量[/b:288c1261d6]

    变量用const修饰,其值不得被改变。任何改变此变量的代码都会产生编译错误。Const加在数据类型前后均可。

    例如:

    [code:1:288c1261d6]void main(void)

    {

        const int i = 10;    //i,j都用作常变量

        int const j = 20;

        i = 15;            //错误,常变量不能改变

        j = 25;            //错误,常变量不能改变

    }[/code:1:288c1261d6]


    [b:288c1261d6]常指针[/b:288c1261d6]

    Const跟指针一起使用的时候有两种方法。

 

    const可用来限制指针不可变。也就是说指针指向的内存地址不可变,但可以随意改变该地址指向的内存的内容。

    [code:1:288c1261d6]void main(void)

    {

        char* const str = "Hello, World";    //常指针,指向字符串

        *str = 'M';            //可以改变字符串内容

        str = "Bye, World";        //错误,如能改变常指针指向的内存地址

    }[/code:1:288c1261d6]

 

    const也可用来限制指针指向的内存不可变,但指针指向的内存地址可变。

    [code:1:288c1261d6]void main(void)

    {

        const char* str = "Hello, World";    //指针,指向字符串常量

        *str = 'M';        //错误,不能改变字符串内容

        str = "Bye, World";    //修改指针使其指向另一个字符串

        *str = 'M';        //错误,仍不能改变字符串内容

    }[/code:1:288c1261d6]

    看完上面的两个例子,是不是糊涂了?告诉你一个诀窍,在第一个例子中,const用来修饰指针str,str不可变(也就是指向字符的常指针);第二个例子中,const用来修饰char*,字符串char*不可变(也就是指向字符串常量的指针)。

 

    这两种方式可以组合起来使用,使指针和内存内容都不可变。

    [code:1:288c1261d6]void main(void)

    {

        const char* const str = "Hello, World";        //指向字符串常量的常指针

        *str = 'M';            //错误,不能改变字符串内容

        str = "Bye, World";        //错误,不能改变指针指向的地址

    }[/code:1:288c1261d6]

 

    [b:288c1261d6]Const和引用[/b:288c1261d6]

    引用实际上就是变量的别名,这里有几条规则:

    声明变量时必须初始化

    一经初始化,引用不能在指向其它变量。

    任何对引用的改变都将改变原变量。

    引用和变量本身指向同一内存地址。

 

    下面的例子演示了以上的规则:

    [code:1:288c1261d6]void main(void)

    {

        int i = 10;                    //i和j是int型变量

        int j = 20;

        int &r = i;                    //r 是变量i的引用

        int &                        //错误,声明引用时必须初始化

        i = 15;                        //i 和 r 都等于15

        i++;                        //i 和 r都等于16

        r = 18;                        //i 和r 都等于18

        printf("Address of i=%u, Address of r=%u",&i,&r);    //内存地址相同

        r = j;                        //i 和 r都等于20,但r不是j的引用

        r++;                        //i 和 r 都等于21, j 仍等于20

    }[/code:1:288c1261d6]


    用const修饰引用,使应用不可修改,但这并不耽误引用反映任何对变量的修改。Const加在数据类型前后均可。

    例如:

    [code:1:288c1261d6]void main(void)

    {

        int i = 10;

        int j = 100;

        const int &r = i;

        int const &s = j;

        r = 20;          //错,不能改变内容

        s = 50;          //错,不能改变内容

        i = 15;          // i和r 都等于15

        j = 25;          // j和s 都等于25

    }[/code:1:288c1261d6]

 

    [b:288c1261d6]Const和成员函数[/b:288c1261d6]

 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接