C++ での Const Int と Int Const の違い
-
C++ での
const int
とint const
の違い -
C++
const
キーワード -
変数を使用した
const int
およびint const
-
const int
およびint const
ポインタ付き -
C++ で
int * const
を使用する -
C++ で
const int *
を使用する - まとめ
プログラミング言語で最も愛され、トリッキーな質問は、プログラムの実行方法と出力に大きな違いをもたらす小さな変更である質問です。
この記事では、const int
が C++ の int const
と同じであるかどうかについて説明します。
C++ での const int
と int const
の違い
コード:
int const a = 1000;
const int a = 1000;
ほぼ同じように見える 2 行のコードを次に示します。さて、これらの 2 行のコードは同じですか?
その質問に答える前に、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
今回は、変数 demo
をキーワード const
で初期化しません。したがって、エラーを発生させることなく、この変数の値を変更できます。
これは基本的に、const
キーワードの仕組みです。const
キーワードの詳細については、このリンクを参照してください。
答えなければならなかった質問に戻りましょう。
変数を使用した const int
および int const
C++ で const
を変数に付加する標準的な方法は、変数のデータ型の前にこのキーワードを置くことです。ただし、変数自体の前に配置すると、同じ目的を果たし、同様に機能します。
これは、次のコード行が同等で正しいことを意味します。
const int demo = 1000;
int const demo = 1000;
そのような宣言を読むときの秘訣は、右から左に行くことです。したがって、コードの最初の行は次のように読み取られます。-demo は定数整数です。
2 行目は–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 const
は const int
と同じであると結論付けることができますが、落とし穴があります。これは、ポインタが入らなくなるまで変数に当てはまります。
ポインタの場合、キーワード const
の意味はその位置によって変わります。キーワード const
がポインタでどのように機能するかについて説明しましょう。
const int
および int const
ポインタ付き
ポインタで const
キーワードを使用するのは非常に簡単です。ポインタを不変にするか、コンテンツが不変を指すようにすることができます。
以下のコード行を見てください。ポインタ demo
は、値を変更できない定数ポインタです。
これは、別の値または変数を指すように変更できないことを意味します。 –demo は整数への定数ポインタであるため、これを右から左に読みます。
int* const demo = &anyvalue;
ただし、以下に示すこの 2 番目のコードでは、ポインターdemo
が指すデータを変更できません。これを次のように読みます。-demo は、定数である整数へのポインタです。
const int *demo = &anyvalue;
これらのコード行の両方を例を挙げて理解しましょう。
C++ で int * const
を使用する
上記のように、ポインタ変数の前にキーワード const
を配置すると、別の値または変数を指すようにポインタを変更できないことを意味します。これは、例を通してより深く見ることができます。
次のポイントは、以下のコードで何が起こっているかをまとめたものです。
- ここでは、最初に変数
one
の値をポインター変数*demo
に割り当てます。これは、ポインタ*demo
が変数one
を指していることを意味します。 - 変数
one
の値を出力すると、出力は1
として取得され、demo
を出力すると、それが指しているアドレスが取得されます。これは変数one
のアドレスです。 - 後で、別の変数
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
を変数one
に割り当て、ポインター*demo
が変数one
を指します。 - 次に、変数
one
とポインター*demo
の値を出力します。これらは両方とも1
として出力を提供します。 - 後で、値
2
をポインタ変数*demo
に割り当てます。 - 最後に、変数
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 int
と int const
の違いについて学びました。さらに、変数とポインターのコンテキストでそれらがどのように機能するかを確認しました。
また、これらの形式はどちらも単純な変数では同じ意味ですが、ポインターの意味が大幅に変わることも学びました。さまざまな実例を通じてこれを理解し、C++ の const
キーワードの基本についても説明しました。