关于const #define inline

首先是关于常量的设定

c++推荐的是用const来定义常量,或者是用枚举

传统的c一般是利用#define来定义常量的,当然,也可以使用const

例如:

c++的风格:

const int LIMIT = 10;

enmu{LIMIT = 10};

const static int LIMIT = 10;

传统C的风格:

#define LIMIT 10

这个没什么好解释的

——————————————————————————————————————————————————

然后是关于inline 和 #define来定义短小的内链函数

看例子:

c++风格:

inline getcir(int length,int width)

{

return (2*length+2*width);

}

传统C的风格:

#define getcir(x,y)  (x*2+y*2)

// 一些比较长的内联函数不得不采用"/"来换行输入

这2者的第一个区别就是,用#define的时候,一定记得要加括号,因为#define是预处理命令

他是文本替换,以上例来说如果调用宏后面的运算优先级高于“+”那么后果大家都知道

而且用宏来调试程序的时候很累,特别是语法错误,因为他显示的是替换后的语句

——————————————————————————————————————————————————

最后是关于const的一些使用规则

1.const int i = 0 与 int const i = 0 是等效的

2.const常量定义的时候必须初始化,也就是说不能 const int i; i = 10;

3.const与指针变量的组合

int temp = 0;

const int * i = &temp; // 等效 int const * i =&temp;    

int * const i = &temp;

前一句限定的是 *i 的内容,也就是说,指针指向的地址中的内容不可变

第二句限定的是 i 的内容,也就是说,指针指向的地址不可变

也就是说,前一句是对接触引用操作符*的常量化

后一句是对指针本身的常量化

再通俗一点,指针是个变量,他里面存放的是一个地址,这个地址就是指针变量的值了

而这个地址指向的值就是对指针解除引用的值了 也就是 *i

前一句是对指针存放的地址对应的值的常量化

而后一句是对指针存放的这个变量的常量化

也就是说,对于第一句: i = new int ; 是合法的,但是不能 *i = 3;

对于第二句: i = new int; 是非法的,但是可以 *i  = 3;

应该解释清楚了吧,再不清楚的,我也没办法了。

——————————————————————————————————————————————————

然后是关于const用于函数参数

如果一个函数的参数是const类型

比如天天用的 char * strcpy(char *dest,const char *src); 函数

这个函数代表着*src是不可改变的,如果函数中有试图改变*src的行为,编译器将报错

B.T.W :const修饰的形参可以被赋予非const修饰的实参

                但是被const修饰的实参,是不能赋予非const修饰的形参的,除非这个函数本身被const限定

那么什么叫做函数本身被const限定呢,这个就要牵扯到类的成员函数了

如果一个类的成员函数被const限定,那么代表着这个成员函数不会改变类的成员的值

例如:

class test{

private:

int x,y;

public:

void show() const;

};

void test::show() const

{

std::cout<<x<<y<<std::endl;

}

也就是说,函数test::show()不会改变类成员变量的值,也就可以接受一个形如 const test t 的对象了

如果test::show()的声明中没有const,那么将不能对const test t调用test::show()函数,因为编译器无法保证函数不会修改对象t的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值