宏、typedef、const

宏#define

宏的本质:替换而已。eg. #define PI 3.1415

宏与const在定义常量时的区别:前者只是把常量替换到源文件中,因此编译调试时会出现具体的数字而宏的名称不会出现在符号表中容易给调试带来麻烦而后者不会有此问题

typedef

typedef定义类型的别名eg. typedef int* p;       typedef int (*PFUNC)(int, char); //定义函数指针类型PFUNC,用法:PFUNC p1, p2;

const

const的作用:const所修饰的变量具有不可修改性

1. const代替#define定义常量更好   const int PI = 3.1415;

2. 使用const常量注意的几点:

const int p = 2;	//声明整型常量并赋初值为 1 
const Teacher teacher;	//声明Tercher类型的常量对象 

const int* p; 	//指针所指向的变量不能修改,也就是一个常量,但指针可以修改
int const* p;     //意义同上
 
int* const p = &number;  //指针不能修改

const int* const p = &number;  //指针和指针所指的变量都不能修改 
区分上述方法:以 “ * ” 为界 ,把声明语句分割成两个部分:如果const在 “ * ” 的左边,则表示const修饰的是指针所指的变量,指针所指的变量不能修改,但指针是可变的;如果const在 “ * ” 的右边,则表示const修饰的是指针,这个指针的值不能在声明后修改,所以在声明时必须赋初值,而指针所指向的int变量值是可以改变的。

3. 经const修饰后的变量作函数参数:表示该变量只是作为一个传入参数,在整个函数内部不能被修改

#include <iostream>
using namespace std;

int add(const int a, int& b)    //a传入参数:被const修饰,整个add函数内部都不能修改a,它只作为函数的传入参数 
                                //b传出参数:可以修改 
{
    b = 5;
    return a + b;
}

int main()
{
    int a = 2;
    int b = 3;
    cout<<add(a, b)<<endl;
        
    return 0;
} 
/* output: 7*/
4. const修饰类成员函数

在类成员函数的末尾加const修饰,表示在这个成员函数内不得改变该对象的任何数据。这种模式常用来表示'对象数据只读'的访问模式,也就是说,这是一个只读的成员函数,是一个查看函数。

#include <iostream>
using namespace std;

class constDemo
{
public:
    char getValue(int index) const
    {
         //m_data[3] = 'A';    //error!const成员函数内不能修改对象的任何数据! 只能只读 
        return m_data[index];
    }
    void show()
    {
    }
private:
    char m_data[3] = {'a', 'b', 'c'};
};

int main()
{
    constDemo demo;
    cout<<demo.getValue(2)<<endl; 
    
    return 0;
}
/* output: c */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值