java修饰符const_C++难点解析之const修饰符

C++难点解析之const修饰符

c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。

const修饰符

const在c++中常用语意是固定,不可改变,可以用在变量定义或声明修饰、函数参数修饰、函数声明。下面将根据不同的场景依次来说明const的用法。

变量定义

对于变量定义,需要区分是一般定义还是指针或引用。在一般定义中const变量定义之后需要立刻初始化,而在指针中则需要区别顶层const或底层const来分别对待。顶层const表示指针指向的对象为const,底层const表示指针自身为const。

/*

* const变量必须在定义的时候同时初始化,

* iA和iB两种形式含义是相同的

*/

const int iA = 1;

int const iB = 2;

int iC = 3;

/*

* pIA为顶层const指针,表示不可以通过pIA改变iA的值,

* 但是可以修改pIA指向的对象。

*/

const int *pIA = &iA;

pIA = &iB;

/*

* pIC为底层const,表示不可以修改pIC指向的对象,

* 但是可以通过pIC指针修改iC的值。

*/

int* const pIC = &iC;

*pIC = 4;

函数参数

const修饰函数参数本质上和变量定义是一样的。在函数参数中,const表示参数在函数体中不会被修改。同样需要注意的是,针对指针的顶层const和底层const的区别。

using namespace std;

/*

* fname为非指针且非const形参,可以在函数体中修改。

* 而lname则为非指针const形参,在函数体中不能进行任何修改。

*/

void FuncParam(string fname, string const lname)

{

fname = "Jackie";

cout << "first name=>" << fname << endl;

cout << "last name=>" << lname << endl;

}

/*

* 针对const对指针形参的修饰,主要需要区分顶层const和底层const。

*/

void FuncParam(const string *fname, string* const lname)

{

string* ptrName = new string("Jackie");

if(!ptrName)

{

throw new std::runtime_error("invalid name pointer");

}

fname = ptrName;

cout << "first name=>" << *fname << endl;

cout << "last name=>" << *lname << endl;

}

函数声明

const在函数声明中有两个可修饰位置,分别是函数返回值和函数末尾。修饰函数返回值时表示函数的返回值是不可修改的,而修饰函数整体(即在函数声明的末尾处)只能在类的成员函数中使用,表示该成员不会对类的其它属性产生影响。

using namespace std;

class ConstCl

{

public:

/*

* GetCName成员返回值为const string类型,

* GetName成员返回值为string类型,且其不会修改ConstCl的其它属性。

*/

const string GetCName();

string GetName() const;

};

总结

对于const修饰符,我们在日常的使用中需要谨记其不可修改的含义,同时需要清楚针对指针时的顶层const和底层const的区别。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值