網站首頁 編程語言 正文
C++類成員函數后面加const
如果類的成員函數后面加了const關鍵字,說明這個函數是不能改變類中的成員變量的。
如果在編寫該函數會修改類中的成員變量,編譯時會出錯,并且也提高了程序的可讀性,當我們看到函數后面有const的話就知道這個函數是不會修改類中數據的。
注意:
1、只能加在非靜態成員函數后面,加在靜態成員函數和普通函數后面會編譯出錯。
2、【例外】如果一個類中有mutable 修飾的成員變量,此類函數是可以修改的。
3、【實現】其實就是在該類函數的this隱式參數的類型為const。
3、const對象只能調用此類函數,非const對象沒有這個限制,所以為了讓const對象調用等多的成員函數,如果一個成員函數不會修改類中數據的話最好在后面加const。
C++const四種用法
一、用const修飾函數參數
1、修飾指針,可以防止指針被修改
void test(const ClassA* a)
{
?? ?ClassA **b = &a; //編譯錯誤,對const指針取地址,需要用一個指向const指針的指針指向它
?? ?const ClassA **c = &a; //正確,對const指針取地址,需要用一個指向const指針的指針指向它
?? ?ClassA *d = a; //編譯錯誤,不能將const指針轉普通指針
?? ?(*b) = new ClassA();
}
void test2(ClassA *a)
{
?? ?ClassA **b = &a;
?? ?(*b) = new ClassA();
}
2、修飾普通類型,說明這個參數不應該被修改
void test(const int a)
{
?? ??? ?a++; //編譯錯誤
?? ??? ?int* c= &a; //編譯錯誤,不能取地址,否則就具備了改a的能力
?? ??? ?int b = a; ?//不用強轉也可以編譯通過,但還是沒能力改a的值?? ??? ?
}
3、修飾引用類型,參數的值不能被修改, 也就失去了引用類型的效果,但傳遞對象時,可以起到不copy對象的目的。
void test(const int& a)
{
?? ?a = 2; //編譯錯誤,不能修改const引用類型的值
}
void test(const ClassA& a) //傳遞的時候,不需要copy一個新的ClassA,又能保護a
{
?? ?
}
二、用const修飾局部或全局變量
功能類似函數參數
三、用const修飾函數返回值
說明函數的返回類型是const的,功能類似于函數參數
const int test()
{
?? ?int a = 1;
?? ?return a;
}
四、用const修飾函數
說明函數不會修改成員變量的值
class ClassA
{
public:
?? ?int b;
?? ?int test() const
?? ?{
?? ??? ?b = 3; //編譯錯誤,const修飾的函數不能修改類成員變量的值
?? ??? ?return b;
?? ?}
}
原文鏈接:https://blog.csdn.net/weixin_42238150/article/details/106459321
相關推薦
- 2023-07-17 uniapp 用forEach循環遍歷數組
- 2023-06-20 Redis?設置密碼無效問題解決_Redis
- 2023-01-20 DeveloperSharp?高效分頁使用詳解_數據庫其它
- 2022-07-12 Linux環境Jenkins部署
- 2022-09-24 ASP.NET?MVC實現文件下載_實用技巧
- 2022-06-07 Python利用capstone實現反匯編_python
- 2022-12-01 django第一個項目127.0.0.1:8000不能訪問的解決方案詳析_python
- 2022-05-29 ASP.NET?Core在WebApi項目中使用Cookie_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支