1. 程式人生 > 其它 >C語言 const 修飾函式返回值 - C語言零基礎入門教程

C語言 const 修飾函式返回值 - C語言零基礎入門教程

目錄

零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門

一.const 簡介

const 是 constant 的縮寫,“恆定不變”的意思。被 const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。所以很多 C++ 程式設計書籍建議:“Use const whenever you need”。

1.const 修飾變數

/******************************************************************************************/
//@Author:猿說程式設計
//@Blog(個人部落格地址): www.codersrc.com
//@File:C語言教程 - C語言 const 修飾函式
//@Time:2021/07/04 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#include <stdio.h>

int main() {
    const int a = 20 ;
    printf("a = %d\n",a);
    a = 200 ;
    printf("a = %d\n",a);
    return 0;
}

/*
 輸出:

 Compilation Failed
 error: assignment of read-only variable 'a'
     6 |     a = 200 ;
       |     ~~^~~~~
 */

用 const 定義的變數的值是不允許改變的,即不允許給它重新賦值,即使是賦相同的值也不可以。並且 const 修飾的變數在定義的時候就給它賦初值,否則報錯

error: uninitialized 'const ' [-fpermissive]

詳細解釋可以直接跳轉:const 修飾變數;

2.const 修飾指標

/******************************************************************************************/
//@Author:猿說程式設計
//@Blog(個人部落格地址): www.codersrc.com
//@File:C語言教程 - C語言 const 修飾函式
//@Time:2021/07/04 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/


//以下兩者等價,表示 *p 不可變。*p 表示的是指標變數 p 所指向的記憶體單元裡面的內容,此時這個內容不可變;
const int *p
int const *p


//此時 const 修飾的是 p,所以 p 中存放的記憶體單元的地址不可變,而記憶體單元中的內容可變。即 p 的指向不可變,p 所指向的記憶體單元的內容可變;
int * const p


//*p 和 p 都被修飾了,那麼 p 中存放的記憶體單元的地址和記憶體單元中的內容都不可變;
const int * const p

詳細解釋可以直接跳轉:const 修飾指標;

二.const 修飾在函式名前面

const 在函式名前面的時候修飾的是函式返回值;在函式名後面表示是 C++ 常成員函式,該函式不能修改物件內的任何成員,只能發生讀操作,不能發生寫操作。

const char * GetString(void);
const int    GetInt(void);
const float  GetFloat(void);
const double GetDdouble(void);

如果給以“指標傳遞”方式的函式返回值加 const 修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加 const 修飾的同類型指標;

const char * GetString(void);

//如下語句將出現編譯錯誤:
//char *str = GetString();

//正確的用法是
const char  *str = GetString();

如果函式返回值採用“值傳遞方式”,由於函式會把返回值複製到外部臨時的儲存單元中,加 const 修飾沒有任何價值。

int GetInt(void);

const int GetInt(void);

以上兩個函式都是都是獨立存在的,並非同一個函式;

三.const 修飾在函式名後面

const 在函式名前面的時候修飾的是函式返回值;在函式名後面表示是 C++ 常成員函式,該函式不能修改物件內的任何成員,只能發生讀操作,不能發生寫操作。

/******************************************************************************************/
//@Author:猿說程式設計
//@Blog(個人部落格地址): www.codersrc.com
//@File:C語言教程 - C語言 const 修飾函式
//@Time:2021/07/04 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

class People
{
 public:
    int talk(void);
    int eat(void) const; // const 成員函式
 private:
    int m_age;

};
int People::eat(void) const
{
    ++m_age; // 編譯錯誤,企圖修改資料成員m_num
    talk();  // 編譯錯誤,企圖呼叫非const函式
    return    m_age;
}
  • const 物件只能訪問 const 成員函式,而非 const 物件可以訪問任意的成員函式,包括 const 成員函式.
  • const 物件的成員是不可修改的,然而 const 物件通過指標維護的物件卻是可以修改的.
  • const 成員函式不可以修改物件的資料,不管物件是否具有 const 性質.它在編譯時,以是否修改成員資料為依據,進行檢查.
  • 然而加上 mutable 修飾符的資料成員,對於任何情況下通過任何手段都可修改,自然此時的 const 成員函式是可以修改它的

四.猜你喜歡

  1. C 語言 陣列下標越界和記憶體溢位區別
  2. C 語言 指標宣告和定義
  3. C 語言 指標 p++ / p–
  4. C 語言 p++/§++/_(p++)/_p++
  5. C 語言 使用指標遍歷陣列
  6. C 語言 指標和陣列區別
  7. C 語言 指標陣列和陣列指標區別
  8. C 語言 空指標 NULL
  9. C 語言 void 指標
  10. C 語言 野指標
  11. C 語言 函式值傳遞和址傳遞
  12. C 語言 函式預設引數
  13. C 語言 函式不定長引數
  14. C 語言 函式指標
  15. C 語言 指標函式
  16. C 語言 回撥函式 callback
  17. C 語言 typedef
  18. C 語言 define 定義常量
  19. C 語言 define 防止標頭檔案重複包含
  20. C 語言 #pragma once
  21. C 語言 #include <> 與 #include “” 區別
  22. C 語言 const 修飾變數
  23. C 語言 const 修飾指標
  24. C語言 const 修飾函式

未經允許不得轉載:猿說程式設計 » C 語言 const 修飾函式返回值

本文由部落格 - 猿說程式設計 猿說程式設計 釋出!