C++(17)--詳解const

詳解const


《老九學堂C++課程》《C++ primer》學習筆記。《老九學堂C++課程》詳情請到B站搜索《老九零基礎學編程C++入門》
-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------

1.const修飾成員變量
2.const修飾函數參數
3.const修飾返回值
4.const 修飾函數

//
// Created by 陳瑩瑩 on 2021/2/25.
//#ifndef CHAPTER12_CONSTDEMO_H
#define CHAPTER12_CONSTDEMO_H
#include <iostream>
using namespace std;
//1.const修飾成員變量
void ConstDemo1(){int num1 = 1024;const int num2 = num1; //常量第一次賦值的時候沒有錯// num2 = 2048;        //第二次賦值的時候就報錯了const int *ptr1_num1 = &num1;  // (與下面這一行等價吧)編譯能夠過, 不能通過指針去改num1,指針本身可以改指int const *ptr2_num1 = &num1;  // 合法ptr1_num1 = &num2;             // 合法:內容const指針再指向,沒問題//*ptr1_num1 = 1024;           // 不合法:內容const指針指向的內容無法修改// const修飾指針變量時:// 1.只有一個const時,如果const 位于*的左側,表示指針所指的數據時常量,不能通過改指針去自改實際數據,指針可以改指// 2.只有一個const時,如果const 位于*的右側,表示指針身上時常量,不能指向其他內存單元,指針所是指向的數據可以修改// 3.兩個const位于*的左右兩側,表示指針和指針所指向的數據都不能修改int * const ptr3_num1 = &num1;// ptr3_num1 = ptr2_num1;     // 不合法
}
// 2.const修飾函數參數
void ConstTest2(const int num){// num = 123; // 不合法,傳遞來的參數num在函數體內部不可改變,與修飾變量的性質一致
}
class Computer{
public:Computer(int core){this->m_core = core;}void buy(int core){}/** 修改電腦的核心頻率 */void SetCore(int core){this->m_core = core;}int GetCore() const {return m_core;}private:int m_core; // cpu的主頻
};
void ConstTest3(const Computer & computer){// const 修飾引用時,不能修改引用變量的成員-// 好處:可以保護傳遞的參數,不需要一個新的參數副本// computer.buy(123);         // 不合法,// 使用cosnt傳遞對象的引用時,可以起到不copy對象的目的(節省效率)// 需要在成員函數的圓括號后加一個const 修飾void buy(int core) const{}
}
//3.const修飾返回值。返回引用加const 效率更高
//強調:使用const 修飾引用類型的一個常見原因是:提高效率
const Computer & GetMax(const Computer & com1, const Computer & com2){if(com1.GetCore() > com2.GetCore()){return com1;}return com2;
}
//如果函數要返回局部對象,就應該直接返回這個對象,而不是返回對象的引用
const Computer GetMax1(const Computer & com1, const Computer & com2){Computer com3(2);  // 不返回引用是一副本的形式生成if(com1.GetCore() > com2.GetCore()){return com1;}else{com3 = com2;}return com3;
}
// 在可以返回對象,也可以返回引用時,首選返回引用高,因為效率高//4.const 修飾函數-- 說明函數不會修改成員變量的值
class TestClass{
public:int value;void ModifyValue(){value = 1111;}
};
//為了在重載運算符時更有效
#endif //CHAPTER12_CONSTDEMO_H

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444798.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444798.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cppcheck的安裝和使用

首先從這里下載linux版本的:http://sourceforge.net/projects/cppcheck/files/cppcheck/ 然后下載對應的版本,解壓,之后安裝: 編譯: g++ -o cppcheck -Ilib cli/*.cpp lib/*.cpp 安裝: make install

leetcode24 兩兩交換鏈表中的節點

給定一個鏈表&#xff0c;兩兩交換其中相鄰的節點&#xff0c;并返回交換后的鏈表。 你不能只是單純的改變節點內部的值&#xff0c;而是需要實際的進行節點交換。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 思路&#xff1a;這一看就是個遞歸定義&…

再議指針和引用的一些事情吧

關于指針和引用一直是學習C++的同學們爭論的焦點,什么時候用指針,什么時候用引用,還有怎么引用數組,這么用指針訪問數組,以及初始化的問題。 不過有一些文章我在很早就已經寫過,但是由于當時時間不充分,自己也都是隨性寫的,可以參看以前我的一個文章:http://blog.csd…

C++(18)--復制構造函數

復制構造函數《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做&#xff0c;重復的事情用心做&#xff0c;用心的事情堅持做(老九君)---------------包裝基本類&#xff0c;封裝一些算法。 需求…

lua與C++粘合層框架

一. lua調用C 在lua中是以函數指針的形式調用函數, 并且所有的函數指針都必須滿足如下此種類型: typedef int (*lua_CFunction) (lua_State *L);   也就是說, 偶們在C中定義函數時必須以lua_State為參數, 以int為返回值才能被Lua所調用. 但是不要忘記了, 偶們的lua_State是…

leetcode147 對鏈表進行插入排序

丟人&#xff0c;我就是按插入排序老老實實寫的啊。。。。 別人肯定map了hhh。 對鏈表進行插入排序。 插入排序的動畫演示如上。從第一個元素開始&#xff0c;該鏈表可以被認為已經部分排序&#xff08;用黑色表示&#xff09;。 每次迭代時&#xff0c;從輸入數據中移除一個…

PaperNotes(13)-Conditional Image Generation with PixelCNN Decoders

conditional Image generation with PixelCNN DecodersICML的best paperpixel cnn 屬于完全可見的信念網絡&#xff0c;需要對 概率密度 建模。給定圖像數據x&#xff0c;想要對概率分布p(x)建模。概率分布p(x)可以看做&#xff0c;每一像素分布同時作用結果的一個聯合分布。一…

Expression : invalid operator 解決方法

從技術上說&#xff0c;用于排序關聯容器的比較函數必須在它們所比較的對象上定義一個“嚴格的弱序化(strict weak ordering)”。&#xff08;傳給sort等算法的比較函數也有同樣的限制&#xff09;,就是兩個對象比大小或先后的規則&#xff0c;比如兩個 string對象比大小的規則…

leetcode23 合并K個排序鏈表

合并 k 個排序鏈表&#xff0c;返回合并后的排序鏈表。請分析和描述算法的復雜度。 示例: 輸入: [ 1->4->5, 1->3->4, 2->6 ] 輸出: 1->1->2->3->4->4->5->6 思路&#xff1a;把初始的每一個鏈表當成數組中的一個數&#xff0c;做…

Xcode LaunchImage 載入界面大小設置

iPhone Portrait iOS 8-Retina HD 5.5 (12422208) @3x iPhone Portrait iOS 8-Retina HD 4.7 (7501334) @2x iPhone Portrait iOS 7,8-2x (640960) @2x iPhone Portrait iOS 7,8-Retina 4 (6401136) @2x iPhone Portrait iOS 5,6-1x (320480) @1x iPhone Portrait iO…

leetcode237 刪除鏈表中的節點(你意想不到的做法,注意細節)

請編寫一個函數&#xff0c;使其可以刪除某個鏈表中給定的&#xff08;非末尾&#xff09;節點&#xff0c;你將只被給定要求被刪除的節點。 現有一個鏈表 -- head [4,5,1,9]&#xff0c;它可以表示為: 示例 1: 輸入: head [4,5,1,9], node 5 輸出: [4,1,9] 解釋: 給定你鏈…

cppcheck值得注意的一些篩選項

使用完cppcheck進行C代碼檢測之后&#xff0c;可能篩選起來很麻煩&#xff0c;一般常見的優化有 emptiness&#xff0c;就是當你使用stl的時候&#xff0c;最好用empty替代size 還有就是 leak

C++(19)--自定義Array,vector練習

自定義Array,vector1.自定義Array2.自定義vector《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做&#xff0c;重復的事情用心做&#xff0c;用心的事情堅持做(老九君)---------------1.自定義…

讓cocos2dx支持并通過arm64 編譯

為了要支持64位,請把這個文件直接替換到對應的lib目錄下,本來是需要改neton_matrix_impl.c里的宏定義, 在 platform/ios/EAGLVIEW.mm中 在neon_matrix_impl.c中修改 #if defined(__ARM_NEON__) 為#if defined(_ARM_ARCH_7) 還有 third_party目錄下的curl的支持。

springboot——概述

Spring Boot 介紹 Spring Boot 是由 Pivotal 團隊提供的全新框架&#xff0c;其設計?的是?來簡化新 Spring 應? 初始搭建以及開發過 程&#xff0c;該框架使?了特定的?式來進?配置&#xff0c;從?使開發?員不再需要定義樣板化的配置。 默認配置了很多框架的使??式…

C++(20)--類型自動轉換

類型自動轉換1.C內置類型轉換2.實現自定義類的類型轉換《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》 -------------簡單的事情重復做&#xff0c;重復的事情用心做&#xff0c;用心的事情堅持做(老九君)---------------…

關于遍歷linux的文件目錄的坑- readdir

去年給公司寫了一個配置服務器,目的是解決運維的工作量太大,而且傳送服務器需要的配置文件需要腳本傳送到各個服(每個服ip不一樣,需要scp),然后再刷新通知各個GameServer,中間有沒有傳送失敗并不得知,而且維護相當麻煩,所以我寫了這個服務器,所有區服的配置都在這里邊…

終于,我讀懂了所有Java集合——sort

Collections.sort 事實上Collections.sort方法底層就是調用的Arrays.sort方法&#xff0c;而Arrays.sort使用了兩種排序方法&#xff0c;快速排序和優化的歸并排序。 快速排序主要是對那些基本類型數據&#xff08;int,short,long等&#xff09;排序&#xff0c; 而歸并排序用于…

PRML(1)--緒論(上)多項式曲線擬合、概率論

PRML緒論1.1 多項式曲線擬合1.1.1 問題描述1.1.2 最小化平方和誤差1.1.3 多項式階數確定1.1.4 有趣問題--高階模型為什么效果不好1.1.4 數據集規模對模型的影響1.1.5 參數正則化緩解過擬合問題1.2 概率論1.2.1離散型隨機變量1.2.2 連續型隨機變量1.2.3 期望和方差1.2.4 貝葉斯概…

大數加減乘

如標題&#xff0c;不解釋。 加 #include<stdio.h> #include<string.h> int main() {char a[1000],b[1000];int i,s[1000],len1,len2,len,j;while(scanf("%s%s",a,b)!EOF) //用字符數組來儲存數{for(i0;i<1000;i)s[i]0;len1strlen(a);len2strlen(b…