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

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

c++ 相比于其余编程语言,多是最为难掌握,概念最为复杂的。结合本身平时的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在函数声明中有两个可修饰位置,分别是函数返回值和函数末尾。修饰函数返回值时表示函数的返回值是不可修改的,而修饰函数总体(即在函数声明的末尾处)只能在类的成员函数中使用,表示该成员不会对类的其它属性产生影响。spa

using namespace std;

class ConstCl
{
public:
	/*
	 * GetCName成员返回值为const string类型,
	 * GetName成员返回值为string类型,且其不会修改ConstCl的其它属性。
	 */
	const string GetCName();
	string GetName() const;
};

总结

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

相关文章
相关标签/搜索