C\C++: const的使用注意

const作用对象:普通常量、函数、对象、数组、指针、结构体、引用。

1、普通常量

语法规则:a、const 数据类型 常量名=常量值;b、数据类型 const 常量名=常量值;

在定义常量时必须初始化!

eg: const int i=9;以后对i只能读取,不能改写。

2、指针

摘抄来的一些写法:

(1)const char pStr="good";//与pStr结合,const修饰的是*pStr,指向的字符串不可变,指针可变

(2)const (char ) pStr="good";//与char结合,相当于新类型(char *),const修饰pStr,指针不可变,指向字符串可变

(3)char * const pStr="good";//类型是(char *),const修饰pStr,指针不可变,指向的字符串可变

(4)(char *) const pStr="good";//同上

(5)char const pStr="good";//类型是char,与pStr结合,const修饰*pStr,指向字符串不可变,指针可变

(6)const char * const pStr="good";//后一个const修饰pStr,指针pStr不可变;与pStr结合,前一个const修饰的常量是pStr,指向的字符串也是不可变

(7)char const * const pStr="good";//同上,指针和指向的字符串都是不可变的

(8)typedef char* pStr;

const pStr str="good";//pStr是个新类型(char *),并且是个整体,此时str是个指针 不可变,指向内容可变

总结:const的位置变化性大,主要是看号是与普通类型符(char等)结合还是与常量名(pStr)的结合;与const是不能连接在一 起说的。

3、CONST在函数中的使用

(1)const修饰函数形参

示例:bool strcmp(const char str1,const char str2);

此函数比较字符串str1与str2是不是相同,只是用来比较而不能对两个字符串做修改,使用const是对两个字符串的保护;

注意:首先明确一点,函数参数是指针、引用、数组类型时,对形参的操作就是对实参的操作,会改变原来数据的值 ;对普通的参数类型操作是对实参复本的操作,不会改变原来数据的值;所以const一般修饰指针、引用、数组类型的形参,使原来的数据不改变,起到保护作用。另外const 指针可以接受const 和非 const 地址,但是非const 指针只能接受非const 地址。

(2)const修饰返回值

函数返回值为 const 只有用在函数返回为引用的情况,因为只有返回值为引用时才会作为左值操作。

示例:const NewType &function();其中NewType为新的复杂类型,不是原有内部类型(int 、char);

一个示例:返回值当左值操作

class student

{

public:

char *name;

public:

student &set(student s)//函数返回自身所在的对象

{

return s;

}

};

void main()

{

student s;

s.name="bad";

cout<<(s.set(s).name="good")<<endl;//修改对象中name的值,如果返回值加const修饰的话,此句报错

}

(3)const修饰整个函数

见const在类和对象中的使用

4、const在类中的使用

const修饰成员函数、修饰数据成员、修饰对象

示例:

class A

{

int x,y;//坐标

public:

int GetX() const;//得到X坐标,const成员函数

void SetX(int i);//设置X坐标

}

int A::GetX() const//定义

{

return x;

}

void A::SetX(int i)

{

x=i;

}

const A aa;

规则和说明:

(1)为成员函数设定const类型,是为了限定些成员函数不能修改类的对象(具体是对象中的数据成员);

(2)任何不修改数据成员的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性。

(3)const成员函数定义时也要和声明时相同,即加上const标记。

(4)非const成员函数不能被const对象调用,构造函数和析构函数对这个规则例外。

(5)const成员函数不能调用同类的非const成员函数。

(6)仅当某个函数是类成员时,将其声明为const才有意义;
原文链接: https://www.cnblogs.com/ddx-deng/archive/2013/04/16/3755852.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/84871

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午9:46
下一篇 2023年2月9日 下午9:47

相关推荐