码迷,mamicode.com
首页 > 编程语言 > 详细

【C++】typedef与const的纠纷

时间:2016-05-02 12:58:48      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

const和 define在常量定义上的问题

在C++中,我们都鼓励使用const定义常量,而不是宏define。原因有很多。

一。const比define更优雅,更符合符号常量的本意。

二。define用在复杂的代码中,不理解define的实质的人就会出问题。define是代码字面上的替换,预处理阶段还原替换的内容。而typedef是包装已经存在的类型(或者复合类型),定义新的原子类型。

 

#include<iostream>
#define DAYS 365
const int MONEY = 100;  

int main(void)
{
    using namespace std;


    int total = DAYS*MONEY;

    cout<<total<<endl;
   
    
    system("pause");


    return 0;
}

预处理后

#include<iostream>

const int MONEY = 100;  
int main(void)
{
    using namespace std;


    int total = 365*MONEY;  //预处理器将DAYS替换为356

    cout<<total<<endl;
   
    system("pause");

    return 0;
}

 

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

 

 

const到底修饰谁,到底哪个才是不变的?

 

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

#include<iostream>

int main(void)
{
    using namespace std;


    int a = 1;

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

    system("pause");

    return 0;
}

 

#include<iostream>

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


    int a = 1;

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

    //p = NULL     error

    //*p = 100     ok

    system("pause");

    return 0;
}

 

【C++】typedef与const的纠纷

标签:

原文地址:http://www.cnblogs.com/lulipro/p/5452183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!