设为首页 加入收藏

TOP

C/C++语言中关于const用法的总结(二)
2015-11-10 13:45:32 来源: 作者: 【 】 浏览:6
Tags:C/C 言中 关于 const 用法 总结
/错误
? ? }
};1
4.在参数中使用const应该使用引用或指针,而不是一般的对象实例


合理利用const在成员函数中的三种用法(参数、返回值、函数),一般来说,不要轻易的将函数的返回值类型定为const;另外,除了重载操作符外一般不要将返回值类型定为对某个对象的const引用。


5.对于使用const修饰来指针的情况


对于以下情况,const放在变量声明符的前后位置效果是一样的,这种情况下不允许对指针a 的内容进行更改操作:


int i;
const int *a = &i;
int const*a = &i;1
但是,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即该指针指向一个地址,该地址的内容不可变;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量:


int i;
// 以下一行表示a是一个指针,可以任意指向int常量或者int变量
// 它总是把它所指向的目标当作一个int常量
// 也可以写成int const* a
const int *a = &i;
// 以下一行表示a是一个指针常量,
// 初始化的时候必须固定指向一个int变量
// 之后就不能再指向别的地方了
// 但是指针指向的内容可以改变
int *const a = &i;6.指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如以下例子中a++是错误的:


int *const a = &i;
a++;? // 错误,a指针本身是常量,不能再指向别的地方7.当指针本身和指针所指向的内容均为常量时


这种情况下可写为:


const int * const a = &i;8.const成员函数返回的引用,也是const


#include
using namespace std;
class A
{
public:
? ? int x;
? ? void set(int x){this->x = x;}
? ? // const成员函数返回的引用也是const,a
? ? // 如果把A&前面的const去掉会出错
? ? // 因为返回的是一个const的对象,返回类型却不是const
? ? // 返回的内容和返回的类型不符
? ? const A& Test1()const
? ? {
? ? // 错误。这是const成员函数的特点
? ? x = 2;
? ? // 不限于*this。不管返回的是什么,哪怕是一个定义为非const的对象,结果也是一样的
? ? return *this;
? ? }
};


int main()
{
? ? A a, b;
? ? // 正确,虽然返回的是一个const,却用另一个非const来接收
? ? b = a.Test1();
? ? // 错误,既然是别名,那么别名的类型要与原来的类型相同
? ? A &c = a.Test1();
? ? // 正确虽然在a.Test1()中a不能改变,但是这里已经出了这个成员函数的作用域
? ? a.set(2);
? ? // 正确,b接收了a.Test1()返回的数据的内容,但是它不是const
? ? b.set(2);
? ? // 错误。a.Test1()是一个对象,这个对象是它的返回值
? ? // 虽然没有名字,但是它就是a.Test1()的返回值
? ? // 值是a.Test1()返回的值,类型是a.Test1()返回的类型
? ? a.Test1().set(2);
? ? return 0;
}9.mutable将数据声明为可变数据成员


C++语言中,mutable是使用较少的??键字,它的作用是:如果一个函数被const 修饰,那么它将无法修改其成员变量的,但是如果一个成员变量是被mutable修饰的话,则可以修改。


mutable 可以用来指出,即使成员函数或者类变量为const,其某个成员也可以被修改。反过来说,可变数据成员永远不能成为const,即使它是const对象的成员。


class A
{
public:
? ? int x;
? ? mutable int y;
? ? A(int a, int b):x(a),y(b){}
};


int main()
{
? ? const A a(0, 0); // const对象必须初始化
? ? a.x = 1;? ? ? ? // 错误
? ? a.y = 2;? ? ? ? // 正确,mutable修饰使得成员可被修改,即使对象a为const
? ? return 0


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java transient关键字使用小记 下一篇ARM汇编指令调试方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: