在 C++ 中使用帶有指標的 const 關鍵字

Jinku Hu 2023年1月30日 2021年6月28日
  1. 使用 const 關鍵字表示 C++ 中的不可變物件
  2. 在 C++ 指標型別中使用 const 關鍵字
在 C++ 中使用帶有指標的 const 關鍵字

本文將向你展示如何在 C++ 中使用帶有指標的 const 關鍵字的方法。

使用 const 關鍵字表示 C++ 中的不可變物件

通常,const 關鍵字用於指定給定的物件在整個程式執行過程中是不可變的。與直接指定字面值相比,命名常量值的做法有助於保持程式碼庫的可調整性和易於維護性。此外,函式介面高度利用 const 關鍵字來指示給定的引數是隻讀的,並有助於將執行時錯誤減少到編譯時錯誤。

我們通過在型別說明符之前包含關鍵字來宣告一個 const 物件,如下面的程式碼片段所示。在這裡,你將觀察到 s1 變數被建立為只讀 string,並且 const 物件不能被分配不同的值。因此,它們必須在宣告期間進行初始化。如果我們嘗試修改 const 物件,則會丟擲編譯器錯誤。

#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
    const string s1("Hello");
    string s2("Hello");

//    s1 += "Joe"; // Error
    s2 += "Joe";

    cout << "s1: " << s1 << endl;
    cout << "s2: " << s2 << endl;

    return EXIT_SUCCESS;
}

輸出:

s1: Hello
s2: HelloJoe

在 C++ 指標型別中使用 const 關鍵字

請注意,當我們宣告一個指標物件時,我們通常也會包含指向物件的型別。因此,僅指定一個 const 關鍵字作為宣告語句的字首變得很棘手。因此,我們需要為指標和指向物件本身設定單獨的 const 說明符。

通常,我們會有這些說明符的三種組合:第一種是指標和物件都是不可修改的;指標不能重新分配的第二種組合,但物件本身是可變的;最後,我們有了指標可變而物件不可變的變體。

所有三個變體都在下一個程式碼片段中宣告,以演示相應的語法表示法。有時,建議從最右邊的說明符到左邊閱讀這些宣告,但你也可以記住 *const 宣告符用於指示不可變指標。

#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
    string s2("Hello");

    const string *const s3 = &s2; // both are non-mutable
    s3 = &s2; //Error
    *s3 = s2; //Error

    const string *s4 = &s2; // only string object is non-mutable
    s4 = s3;
    *s4 = s2; //Error

    string *const s5 = &s2; // only pointer is non-mutable
    s5 = s3; //Error
    *s5 = s2;

    return EXIT_SUCCESS;
}
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ Const