弄清const与指针、引用之间的关系

时间:2021-09-28 23:56:24

const和 define在常量定义上的差别

在C++中,我们可以使用const 或者 宏define来定义常量。但是C++鼓励使用const定义常量,而不是宏define。原因有很多。

1、define是C遗留下来的老古董,const比define更优雅,更符合符号常量的本意。

2、define用在复杂的代码中,不理解define的实质的人就会出问题。define是代码字面上的替换,预处理阶段还原替换的内容。

const定义的常量可以说是“不变的变量“,因为它确实用了一个变量取保存某个不会发生改变的值,而define定义的常量,实质上是字面值常量,当然也不会改变了。

const与指针:到底修饰谁,到底哪个才是不变的?

我总结的是:如果const放在最前面,则const会往后跨越一个原子类型,修饰后面的。如何理解这句话,通过代码演示:

#include<iostream>

int main(void)
{
    using namespace std;

    ;

    const int*p = &a;     //int为原子类型,实质效果是: int const*p = &a;
                          //即:通过指针p来操作a时,a是一个常量,只读不可写。

    system("pause");

    ;
}
#include<iostream>

typedef int* pint;
int main(void)
{
    using namespace std;

    ;

    const pint p = &a;     //pint为原子类型,实质效果是: pint const p = &a;
                           //即:p是一个常量,只读不可写。

    //p = NULL     error

    //*p = 100     ok

    system("pause");

    ;
}

const与引用