[C++]-浅谈const

本文详细阐述了C++中的const关键字,包括如何定义常量,常量指针的应用,函数参数和返回值的const修饰,以及const成员函数的作用。重点讲解了const在保护数据安全和提升性能方面的优势,并通过实例说明不同场景下的const转换和对象与const函数的调用规则。
摘要由CSDN通过智能技术生成


const 是不变的,不易改变的意思。在 C++ 中可用来修饰内置类型变量、自定义对象、成员函数、返回值、函数参数。

const使用

const可以保护修饰的对象,防止意外修改;并有助于优化,提升性能(如const常量可能都不需要为其分配内存)。

定义常量

const修饰的变量为常量(声明时必须初始化),与宏类似,但更安全。以下两者方式是等价的:

<TYPE> const name = value;
const <TYPE> name = value;

作为外部连接时(声明时可以不初始化,此时一定会为其分配内存),会扩大至全局:

// test.cpp
extend const int DefSize=10;

// <other>.cpp
extend const int DefSize;

指针

指针本身是常量:

char* const pValue;

指针指向的内容是常量:

const char *pValue;

指针与内容都为常量:

const char* const pValue;

函数

修饰参数

修饰参数,禁止修改(对于形参无意义)。

对于指针参数,规则与上节指针部分相同:

void fun(const char* const pValue)

修饰引用参数(增加效率同时,避免被修改):

void fun(const <TYPE>& pValue);
void fun(const <Class>& pValue)

修饰返回值

避免函数返回的内容被修改:

const int* fun(...);

转换为非const

一些情形下,需要把const类型转换为非const(此时要保证不要修改对应内容):

const_cast(expression)

const成员函数

以下是对象与成员函数是否加const时的关系:const对象是不允许调用non-const成员函数的。当成员函数中同时存在const与non-const版本时(const函数与非const函数间是可以重载的):

  • const对象只会调用const版函数;
  • non-const对象只会调用non-const版本函数;
constconst object
(data memebers不能修改)
non-const object
(data memebers可修改)
const member function
(保证data不变)
non-const member function
(不保证data不变)

字符串中(修改是通过COW(Copy On Write)方式实现的)中const与非const重载示例:

charT operator[](size_type pos)const{
  // ... // 不需要考虑COW
}

reference operator[](size_type pos){
  // ... // 需要考虑COW
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值