詳解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