C/C++语言中关于const用法的总结

本文详细总结了C/C++中const的多种用法,包括:1)声明只读变量;2)修饰函数参数保护不变;3)用于函数返回值;4)在类成员函数中使用;5)常量与宏的区别。同时,讨论了const在指针和引用中的应用,以及const成员函数和可变数据成员的概念。
摘要由CSDN通过智能技术生成

一. const的基本功能与用法

1.将限定符声明为只读

使用方法如下,在类型前/后加上关键字const,该变量必须被初始化,否则编译错误;该变量不能被重新赋值,否则也编译错误。
举例:

const int i = 50;   // 编译正确
const int j;        // 编译错误
int k = 0;
i = k;              // 编译错误
k = i;              // 编译正确

2.用于修饰函数形参,保护参数使其不被修改

用法1:若形参为const A* a,则不能改变函数所传递的指针内容,这样对指针所指向的内容起到保护作用,这里需要注意的是,该修饰不能改变指针所指向地址所存储的内容,但是指针a所指向的地址可以被改变,具体例子如下:

void Test(const int *a)
{
    *a = 1;          //错误,*a不能被赋值
    a = new int(10086);  //正确,为指针a开辟新的空间,并令*a=10086
}

int main()
{
    int *a = new int(10000);
    Test(a);
    return 0;
}

用法2:若形参为const A& a,则不能改变函数传递进来的引用对象,从而保护了原对象的属性。

对于自定义的数据类型,用引用传递速度较快,如果不想改变原值,就可以用const来保护参数,如以下例子:

void Test(const int &a) //保护L7中的a不会被改变
{
    a = 2;//错误,a不能给常量赋值
}

int main()
{
    int a = 3;
    Test(a);
    return 0;
}

事实上对于内置型数据类型(如以上例子中的int类型),用引用传递不会使速度更快。如果是用引用传参,一般是为了改变参数值;如果不想改变参数的值,直接值传递即可,不必使用const修饰。而对于自定义数据类型的输入参数,为了提高速度和效率,应使用“const + 引用传递”代替值传递。例如:

将函数 void Test(A a) 改为-> void Test(const A &a)

3.用于修饰函数返回值

用法1:用const修饰返回值为对象本身(非引用和指针)的情况多用于二目操作符重载函数并产生新对象的时候
举例:

const Rational operator*(const Rational& lhs, const Rational& rhs) 
{ 
    return Rational(lhs.numerator() * rhs.numerator(), 
lhs.denominator() * rhs.denominator()); 
} 
Rational a,b; 
Radi
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值