博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++难点解析之const修饰符
阅读量:7043 次
发布时间:2019-06-28

本文共 1622 字,大约阅读时间需要 5 分钟。

  hot3.png

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的区别。

转载于:https://my.oschina.net/taodf/blog/1834364

你可能感兴趣的文章
【学以致用】Django之(URL)路由系统
查看>>
XML(eXtensible Markup Language)速成
查看>>
apache+mysql+php 安装教程
查看>>
关于删除oracle 用户及数据 出现 ORA-00604
查看>>
solr 为单独的core导入jar
查看>>
cut用法
查看>>
NO.118 不懂语言代码,超级菜鸟的建站分享(一):建站流程。
查看>>
iOS SDK计算SHA1和MD5
查看>>
利用regedit,来禁止使用regedit.
查看>>
Linux设置本地yum源
查看>>
laravel身份验证-Auth的使用
查看>>
python天天进步(3)--字典排序
查看>>
Java 同步代码块的疑问
查看>>
saltstack安装指导(一)
查看>>
Lync Server外部访问系列PART5:模拟公网DNS
查看>>
Python 小议1: 求一个不确定列表中的每个数的对应数的次幂和。
查看>>
Hadoop配置机架感知(python脚本)
查看>>
C/C++ const 修饰符详解
查看>>
vsftp报错425 Failed to establish connection
查看>>
PostGres xl ERROR: Snapshot too old - RecentGlobalXmin......
查看>>