删除文章

确定要删除这篇文章吗?

取消
确定

const用法(迁移2011-01-04)

     阅读(579)  2017-01-22 21:33:06

const允许你指定一个语义约束(也就是指定一个“不该被改动”的对象),而编译器会强制实施这项约束。它允许你告诉编译器和其他程序员某值应该保持不变。编程时如果需要保持某个值不变, 你就应该用const, 这样编译器就会确保这条约束不被违反。

函数参数加const


void func(int * const val)//地址不能变
(*(val++)); //错误, 地址改变了
*val = 100; //正确, 值改变了
void func(const int * val)//所指的值不能变
void func(int const *val) //这两种写法是一样的,const都在*号的左边
((*val)++); //错误,值改变了
val = val +3; //正确, 所指的地址改变了

如果关键字const出现在星号左边, 表示被指物是常量;   
如果出现在星号右边, 表示指针自身是常量;   
如果出现在星号的两边, 表示被指物和指针两者都是常量。   

函数返回值前加const


class Rational{...};
const Rational operator* (const Rational& lhs, const Rational& rhs);//重载*号
Rational a, b, c;
(a * b) = c; //错误, 

类的成员函数后面加const


class People
{
    ...
void set_number(int n) const
{
    num = n; //错误, 成员函数后面加了const不能给成员变量赋值
}

int num;
};

解决办法是:mutable int num; //在num前加mutable(可变的)

文章评论

Keep it simple,stupid
文章数
292
总访问量
350259
今日访问
273
最近评论

xuehaoyun : 很不错,来围观一下
tujiaw : 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞 : 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
于淞 : 你好,这个文章的源码能分享一下吗,838106303@163.com,谢谢了 上面的链接不能用了
tujiaw : 多谢多谢
essaypinglun college-paper.org : 很好的博客,赞赞
Folly : 这个实现有点奇怪,Qt为什么没有统一的比对方法。
过多s : alert("hello, world!")
tujiaw : 还不错哦
回到顶部