C++ 中 Const Int 和 Int Const 之間的區別

Shikha Chaudhary 2024年2月16日
  1. C++ 中 const intint const 的區別
  2. C++ const 關鍵字
  3. const intint const 帶變數
  4. const intint const 與指標一起
  5. 在 C++ 中使用 int * const
  6. 在 C++ 中使用 const int *
  7. まとめ
C++ 中 Const Int 和 Int Const 之間的區別

任何程式語言中最受喜愛和最棘手的問題是那些微小的變化會對程式的執行方式和輸出產生很大的影響。

在本文中,我們將討論 const int 是否與 C++ 中的 int const 相同。

C++ 中 const intint const 的區別

程式碼:

int const a = 1000;
const int a = 1000;

這是兩行看起來幾乎相同的程式碼。現在,這兩行程式碼是一樣的嗎?

在回答這個問題之前,讓我們重溫一下 C++ 的 const 關鍵字的基礎知識。

C++ const 關鍵字

C++ 的 const 關鍵字有助於保持某些事物不變。這意味著如果在任何變數、指標或方法之前放置 const 關鍵字,則這些變數、指標和方法的資料項的值在程式執行期間不能更改。

假設我們嘗試更改任何使用 const 關鍵字初始化的變數、指標或方法的值,這會給我們帶來錯誤。

程式碼:

#include <iostream>
using namespace std;

int main() {
  const int demo = 1;  // constant variable
  cout << demo;
  demo = 2  // changing the value of constant variable
         cout
         << demo;
  return 0;
}

輸出:

In function 'int main()': error: assignment of read-only variable 'demo'
    9 |     demo = 2
    |     ~~~~~^~~

在上面的示例中,我們宣告瞭一個 const 變數 demo 併為其賦值 1。然後,我們為同一個常量變數分配一個不同的值 2

正如你在輸出中看到的那樣,這會導致錯誤。

程式碼:

#include <iostream>
using namespace std;

int main() {
  int demo = 1;
  cout << "The initial value is: " << demo << endl;

  // changing the value of the variable
  demo = 2;

  cout << "The changed value is: " << demo << endl;
  return 0;
}

輸出:

The initial value is: 1
The changed value is: 2

這一次,我們不用關鍵字 const 初始化變數 demo。因此,我們可以更改此變數的值而不會出現任何錯誤。

這基本上就是 const 關鍵字的工作原理。請參閱連結以瞭解有關 const 關鍵字的更多資訊。

讓我們回到我們必須回答的問題。

const intint const 帶變數

在 C++ 中將 const 附加到變數的標準方法是將此關鍵字放在變數的資料型別之前。但是,如果我們將它放在變數本身之前,它的用途和工作方式相同。

這意味著以下程式碼行是等效且正確的。

const int demo = 1000;
int const demo = 1000;

當你閱讀此類宣告時,訣竅是從右到左。因此,第一行程式碼將被解讀為 - demo 是一個常量整數。

而第二行讀作 - demo 是一個常量整數。毫無疑問,這兩種說法的意思是一樣的。

我們可以通過一個工作示例來驗證這一點。在以下示例中,我們將關鍵字 const 放在資料型別之前,即 int,然後列印變數 demo

程式碼:

#include <iostream>
using namespace std;

int main() {
  const int demo = 1000;  // const keyword before the data type
  cout << demo;
}

輸出:

1000

讓我們嘗試在變數 demo 本身之前放置關鍵字 const

#include <iostream>
using namespace std;

int main() {
  int const demo = 1000;  // const keyword before the variable itself
  cout << demo;
}

輸出:

1000

看看這些語句如何以相同的方式工作而不會導致任何型別的錯誤。當我們必須宣告一個常量變數時​​,我們可以使用這些語句中的任何一個。

因此,我們可以得出結論,int constconst int 相同,但有一個問題。這對於變數來說是正確的,直到指標不進來。

對於指標,關鍵字 const 的含義根據其位置而變化。讓我們討論關鍵字 const 如何與指標一起工作。

const intint const 與指標一起

const 關鍵字與指標一起使用非常簡單。我們可以使指標不可變或指向不可變的內容。

看下面的程式碼行。指標 demo 是一個常量指標,它的值不能改變。

這意味著它不能被修改為指向不同的值或變數。我們從右到左閱讀這個 - demo 是一個指向整數的常量指標。

int* const demo = &anyvalue;

但是,在下面給出的第二段程式碼中,指標 demo 指向的資料不能更改。我們將其解讀為 - demo 是一個指向常量整數的指標。

const int *demo = &anyvalue;

讓我們通過示例來理解這兩行程式碼。

在 C++ 中使用 int * const

如上所述,將關鍵字 const 放在指標變數之前意味著我們不能將指標更改為指向不同的值或變數。這可以通過一個例子更深刻地看出。

以下幾點總結了下面給出的程式碼中發生的事情。

  1. 在這裡,我們首先將變數 one 的值賦給指標變數*demo。這意味著指標*demo 指向變數 one
  2. 在列印變數 one 的值時,我們得到輸出為 1,而在列印 demo 時,我們得到它指向的地址。這是變數 one 的地址。
  3. 稍後,我們將另一個變數 two 分配給同一個指標變數 demo 並列印值。這次指標返回一個不同的地址。

程式碼:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  int two = 2;
  int *demo = &one;  // demo pointer points to variable one

  cout << one << endl;
  cout << demo << endl;

  demo = &two;  // assigning the variable two to demo variable

  cout << two << endl;
  cout << demo << endl;

  return 0;
}

輸出:

1
0x7ffc22e802a8
2
0x7ffc22e802ac

你可以看到我們如何將不同的變數分配給同一個指標變數。如果在指標變數之前附加 const 關鍵字,這種更改是不可能的。

程式碼:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  int two = 2;
  int* const demo = &one;  // attach const keyword before the pointer variable

  cout << one << endl;
  cout << demo << endl;

  demo = &two;  // this assignment will now give an error

  cout << two << endl;
  cout << demo << endl;

  return 0;
}

輸出:

In function 'int main()': error: assignment of read-only variable 'demo'
   13 |     demo = &two;
      |     ~~~~~^~~~~~

請注意,這一次,由於宣告的指標是常量,我們不能為其分配不同的變數。因此我們得到一個錯誤。

這就是 int const 與指標一起使用時的含義。

在 C++ 中使用 const int *

我們已經知道我們可以使用指標來改變變數的值。這在下面的示例中顯示。

以下幾點總結了這段程式碼中發生的事情。

  1. 我們首先將值 1 分配給變數 one,指標*demo 指向變數 one
  2. 然後,我們列印變數 one 和指標*demo 的值。這兩個都將輸出作為 1
  3. 稍後,我們將值 2 分配給指標變數*demo
  4. 最後,我們列印變數 one 和指標 demo 的值,但這次它們都將輸出作為 2

程式碼:

#include <iostream>
using namespace std;

int main() {
  int one = 1;  // variable one holds the value 1
  int *demo = &one;

  cout << one << endl;
  cout << *demo << endl;

  *demo = 2;  // assign the value 2 to variable demo

  cout << one << endl;
  cout << *demo << endl;
}

輸出:

1
1
2
2

藉助分配變數的指標,瞭解變數的值如何變化。現在,如果你在指標的資料型別之前使用 const 關鍵字,這種可變性將是不可能的。

程式碼:

#include <iostream>
using namespace std;

int main() {
  int one = 1;
  const int *demo = &one;  // attach const keyword before data type

  cout << one << endl;
  cout << *demo << endl;

  *demo = 2;  // this assignment will give an error now

  cout << one << endl;
  cout << *demo << endl;
}

輸出:

In function 'int main()': error: assignment of read-only location '* demo'
   12 |     *demo = 2;
      |     ~~~~~~^~~

請注意,如果我們嘗試更改指標指向的變數的值,則會出現錯誤。這就是 const int 與指標一起使用時的含義。

まとめ

在本文中,我們瞭解了 const intint const 的不同之處。此外,我們看到了它們如何在變數和指標的上下文中工作。

我們還瞭解到,這兩種格式對於簡單變數的含義相同,但指標的含義會發生顯著變化。我們通過各種工作示例理解了這一點,並且還學習了 C++ 的 const 關鍵字的基礎知識。

相關文章 - C++ Keyword