最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ const 常量完整用法詳解

 更新時(shí)間:2026年06月13日 10:13:15   作者:C+++Python  
在C++中,const關(guān)鍵字用于聲明一個(gè)常量,即在編譯時(shí)就已經(jīng)確定其值的變量,使用const可以使代碼更加健壯和易于理解,因?yàn)樗梢苑乐鼓承╊愋偷男薷?從而提高代碼的安全性,下面是一些關(guān)于如何在C++中使用const的完整用法和示例,

const 用于修飾只讀對(duì)象,被修飾后值不可修改,有類型、作用域,是 C++ 主力常量用法。下面分場(chǎng)景逐一講解。

一、基礎(chǔ):修飾普通變量(常量變量)

1. 基本語(yǔ)法

const 類型 變量名 = 初始值;

強(qiáng)制要求:必須初始化,定義后不能再賦值修改。

#include <iostream>
using namespace std;
int main()
{
    const int num = 100;
    const double pi = 3.14159;
    // num = 200;  // 編譯報(bào)錯(cuò):const 只讀,無(wú)法修改
    cout << num << " " << pi << endl;
    return 0;
}

2. 作用域規(guī)則

  • 局部 const:定義在函數(shù)/代碼塊內(nèi),僅當(dāng)前作用域有效。
  • 全局 const:默認(rèn)僅當(dāng)前源文件可見(內(nèi)部鏈接),和普通全局變量不同。
    • 若要跨文件使用,加 extern
// 文件A.cpp
extern const int g_val = 10;
// 文件B.cpp
extern const int g_val; // 聲明,可使用

3. 用變量初始化 const

const 可以是運(yùn)行時(shí)常量,允許用普通變量初始化:

int a = 20;
const int b = a; // 合法,運(yùn)行時(shí)確定值

二、重點(diǎn):const + 指針(三大組合,高頻考點(diǎn))

根據(jù) const 位置不同,含義完全不同,分三類記憶。

1. 常量指針(const修飾指向的內(nèi)容)

格式:const 類型* 指針名

  • 指針本身可以改指向
  • 指針指向的數(shù)據(jù)不能修改
int x = 1, y = 2;
const int* p = &x;
p = &y;        // ? 指針指向可以變
// *p = 100;   // ? 指向的值不能修改

2. 指針常量(const修飾指針本身)

格式:類型* const 指針名

  • 指針本身不能改指向(必須初始化)
  • 指針指向的數(shù)據(jù)可以修改
int x = 1;
int* const p = &x; // 定義時(shí)必須初始化
*p = 100;      // ? 內(nèi)容可改
// p = &y;     // ? 指針指向不能變

3. 雙重 const(內(nèi)容、指針都只讀)

格式:const 類型* const 指針名

  • 指針指向 不能改
  • 指向的數(shù)據(jù) 不能改
int x = 1;
const int* const p = &x;
// *p = 100;  ?
// p = &y;    ?

快速判斷技巧:const 靠近誰(shuí),誰(shuí)就不能改。

三、const 修飾引用

引用本身等價(jià)于變量別名,const 修飾引用表示不能通過引用修改原數(shù)據(jù)
格式:const 類型& 引用名

int a = 10;
const int& r = a;

// r = 20;  // ? 不能通過引用修改 a
a = 20;    // ? 原變量本身可以修改

常用場(chǎng)景:函數(shù)傳參,避免拷貝 + 保護(hù)數(shù)據(jù)。

四、const 修飾函數(shù)(分:參數(shù)、返回值、成員函數(shù))

1. 修飾函數(shù)形參

目的:保護(hù)實(shí)參不被函數(shù)修改,推薦搭配引用/指針使用,減少拷貝。

// 不允許修改傳入的字符串
void print(const string& s)
{
    cout << s << endl;
    // s = "test"; 報(bào)錯(cuò)
}

2. 修飾函數(shù)返回值

一般用于返回指針/引用,防止外部修改返回的內(nèi)容:

const int& getVal(int& a)
{
    return a;
}
int main()
{
    int x = 10;
    const int& res = getVal(x);
    // res = 20; 報(bào)錯(cuò)
    return 0;
}

普通值返回加 const 無(wú)意義。

3. 修飾類的成員函數(shù)(類專屬用法)

const 寫在函數(shù)參數(shù)列表后面,表示:

該函數(shù)不會(huì)修改類的任何成員變量,也不能調(diào)用非 const 成員函數(shù)。

語(yǔ)法:

返回值 函數(shù)名(參數(shù)) const;

示例:

class Test
{
private:
    int num = 10;
public:
    // const 成員函數(shù)
    void show() const
    {
        cout << num << endl;
        // num = 20;  ? 不能修改成員變量
    }
};

規(guī)則:

  1. const 成員函數(shù)內(nèi),禁止修改成員變量。
  2. const 對(duì)象只能調(diào)用 const 成員函數(shù)。
  3. const 成員函數(shù)不能調(diào)用普通(非 const)成員函數(shù)。

五、const 修飾類成員變量

類內(nèi) const 成員變量,必須在構(gòu)造函數(shù)初始化列表初始化,不能在構(gòu)造函數(shù)體內(nèi)賦值。

class A
{
private:
    const int val; // const 成員
public:
    // 只能在初始化列表賦值
    A() : val(100) 
    {
        // val = 100;  ? 體內(nèi)賦值報(bào)錯(cuò)
    }
};

六、補(bǔ)充:const 與 類型轉(zhuǎn)換、const _cast

  1. const 變量不能直接轉(zhuǎn)普通變量,強(qiáng)行修改屬于未定義行為。
  2. 若臨時(shí)需要去除只讀屬性,可用 const_cast(謹(jǐn)慎使用):
const int a = 10;
int* p = const_cast<int*>(&a);
*p = 20; // 不推薦,修改原 const 常量是未定義行為

七、const 總結(jié)速記

  1. 普通變量:const 類型 變量 = 值,只讀不可改。
  2. 指針:
    • const T*:內(nèi)容不可改,指針可改
    • T* const:指針不可改,內(nèi)容可改
    • const T* const:全都不可改
  3. 引用:const T&,禁止通過引用改原數(shù)據(jù)。
  4. 函數(shù)參數(shù):const 保護(hù)實(shí)參,優(yōu)先引用傳參。
  5. 類成員函數(shù):尾部加 const,承諾不修改成員。
  6. 類 const 成員變量:必須在初始化列表初始化。

到此這篇關(guān)于C++ const 常量完整用法詳解的文章就介紹到這了,更多相關(guān)C++ const 常量用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言使用矩形法求定積分的通用函數(shù)

    C語(yǔ)言使用矩形法求定積分的通用函數(shù)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言使用矩形法求定積分的通用函數(shù),分別求解sinx, cosx,e^x,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語(yǔ)言實(shí)現(xiàn)BMP圖像開運(yùn)算處理

    C語(yǔ)言實(shí)現(xiàn)BMP圖像開運(yùn)算處理

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)BMP圖像開運(yùn)算處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++中使用cout以hex格式輸出方式

    C++中使用cout以hex格式輸出方式

    這篇文章主要介紹了C++中使用cout以hex格式輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言學(xué)好遞歸看這一篇就夠了

    C語(yǔ)言學(xué)好遞歸看這一篇就夠了

    遞歸指的是在函數(shù)的定義中使用函數(shù)自身的方法,舉個(gè)例子: 從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,循環(huán)下去
    2021-10-10
  • 使用C++制作簡(jiǎn)單的web服務(wù)器(續(xù))

    使用C++制作簡(jiǎn)單的web服務(wù)器(續(xù))

    本文承接上文《使用C++制作簡(jiǎn)單的web服務(wù)器》,把web服務(wù)器做的功能稍微強(qiáng)大些,主要增加的功能是從文件中讀取網(wǎng)頁(yè)并返回給客戶端,而不是把網(wǎng)頁(yè)代碼寫死在代碼中,有需要的小伙伴來參考下吧。
    2015-03-03
  • 詳解C語(yǔ)言中的錯(cuò)誤報(bào)告errno與其相關(guān)應(yīng)用方法

    詳解C語(yǔ)言中的錯(cuò)誤報(bào)告errno與其相關(guān)應(yīng)用方法

    這篇文章主要介紹了C語(yǔ)言中的錯(cuò)誤報(bào)告errno與其相關(guān)應(yīng)用方法,包括errno和strerror以及perror的介紹,需要的朋友可以參考下
    2015-08-08
  • C語(yǔ)言中讀寫交替時(shí)出現(xiàn)的問題分析

    C語(yǔ)言中讀寫交替時(shí)出現(xiàn)的問題分析

    讀寫命令交替,一定要使用fseek重新定位,否則出現(xiàn)輸入顯示混亂,這篇文章主要介紹了C語(yǔ)言中讀寫交替時(shí)出現(xiàn)的問題分析,需要的朋友可以參考下
    2022-12-12
  • C++ vector容器實(shí)現(xiàn)貪吃蛇小游戲

    C++ vector容器實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C++ vector容器實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語(yǔ)言 表、棧和隊(duì)列詳解及實(shí)例代碼

    C語(yǔ)言 表、棧和隊(duì)列詳解及實(shí)例代碼

    這篇文章主要介紹了C語(yǔ)言 表、棧和隊(duì)列詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 使用C/C++訪問MySQL的教程詳解

    使用C/C++訪問MySQL的教程詳解

    在實(shí)際開發(fā)中,語(yǔ)言連接MySQL是為了能夠在編程語(yǔ)言中與MySQL數(shù)據(jù)庫(kù)進(jìn)行交互和操作,大部分情況我們都是通過語(yǔ)言連接MySQL,建立與MySQL數(shù)據(jù)庫(kù)的連接,本篇文章主要講解使用C/C++訪問MySQL的教程,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

望奎县| 龙里县| 惠来县| 页游| 长春市| 邹城市| 永胜县| 墨脱县| 呼伦贝尔市| 崇文区| 漾濞| 扶风县| 凉山| 长顺县| 遂溪县| 梁山县| 兴国县| 磐安县| 南开区| 淳化县| 南陵县| 新绛县| 三原县| 双城市| 惠水县| 阳高县| 日喀则市| 繁昌县| 普格县| 霍州市| 秦安县| 寻乌县| 高陵县| 建宁县| 新巴尔虎右旗| 巨野县| 察雅县| 福安市| 潼关县| 乌兰浩特市| 郴州市|