C++constキーワードの実例的な使い方
C++の中のconstの方がコンパイル段階の苊defineのようです。 C言語では、コンパイラはまずmがあるメモリからデータを取り出して、nにデータを与えます。
C++において、コンパイラは直接10をmに割り当て、メモリを読み込まないプロセスは、int n=10と同じ効果があります。
C++の定数は、より類似しています。値を置き換えるプロセスです。ただし、前処理段階では、通常量はコンパイル段階で置き換えられます。 C++の中のconst利点:プログラムの実行効率を向上させました。
欠点:メモリの変化を反映できません。一旦const変数が修正されると、C++は最新の値を取得できません。 const変数が変更されることは禁止されています。文法的な制約だけで、ポインタによって変更されます。
一般的なグローバル変数のスコープは現在のファイルですが、他のファイルでも見られます。extern宣言を使って使えばいいです。
まとめ:
C++のconst変数はメモリを使っても、アドレスを取得&取得できますが、コンパイルの時期のように使うことができます。
璣defineも値が入れ替わります。可視範囲も現在のファイルです。
〼defineで定義されている定数は文字列の置換だけであり、タイプ検査は行われません。
constで定義されている定数はタイプがあり、コンパイラでタイプチェックが行われます。
知識ポイント追加:
const修飾関数パラメータ
const修飾パラメータは、関数内でパラメータの元のオブジェクトが変更されることを防止するためです。したがって、三つの場合について議論することができる。関数パラメータは値伝達である:値伝達はパラメータのコピー関数を伝達するので、関数コードがどのように動作しても、コピーを修正するだけで元のオブジェクトを修正できないので、パラメータをconstとして宣言する必要はない。 関数パラメータは、ポインタ伝達(pass-by-pointer)は、浅いコピーを行い、元のオブジェクトをコピーすることなく、ポインタを関数にコピーします。したがって、ポインタパラメータにトップレベルのconstを加えると、ポインタが改竄されるのを防ぐことができ、さらに下の層のconstでは、オブジェクトの改竄を防ぐことができる。 関数パラメータは参照です。参照伝達には重要な役割があり、参照は対象の別名であるため、コピー対象が必要なく、オーバーヘッドが低減されます。これは、引用を修正して元のオブジェクトを直接修正することもできるので、ほとんどの場合、推奨関数パラメータはpass-by-reference-to-constとして設定されます。引用に下層のconstを加えると、コピーオーバヘッドを低減することができ、また、下層から参照されるオブジェクトの修正を防ぐことができる。 以上はC++constキーワードの実例用法の詳細です。C++constキーワードについては他の関連記事に注目してください。
const int m = 10;
int n = m;
変数はメモリを占有するもので、constで修飾されても例外ではない。m,n 2つの変数は異なるメモリを占有します。int n=mです。mの値をnに割り当てることを表します。
#include <stdio.h>
int main(){
const int n = 10;
// :&n const int*, int* p, 。
int *p = (int*)&n; //
*p = 99; // const
printf("%d
", n);
return 0;
}
// C , 99
// C++ , 10
// C , n n , n 99
// C++ ,print("%d
", n); n 10, n , 。
C++におけるグローバルconst変数の可視範囲は現在のファイルです。一般的なグローバル変数のスコープは現在のファイルですが、他のファイルでも見られます。extern宣言を使って使えばいいです。
/* 1*/
#include <stdio.h>
#include"func.cpp"
int n = 10;
void func();
int main(){
func();
printf("main: %d
", n);
return 0;
}
/* 2*/
#include <stdio.h>
extern int;
void func();
{
printf("module: %d
", n);
}
/* :*/
module:10
main:10
// C ,const , 。
const int n = 10;
// C const , , 。
// C++ , 。
C++は、グローバルconst変数の可視範囲を現在のソースファイルに限定していますので、ヘッダファイルに何度も含まれていてもエラーが発生しません。まとめ:
C++のconst変数はメモリを使っても、アドレスを取得&取得できますが、コンパイルの時期のように使うことができます。
璣defineも値が入れ替わります。可視範囲も現在のファイルです。
〼defineで定義されている定数は文字列の置換だけであり、タイプ検査は行われません。
constで定義されている定数はタイプがあり、コンパイラでタイプチェックが行われます。
知識ポイント追加:
const修飾関数パラメータ
const修飾パラメータは、関数内でパラメータの元のオブジェクトが変更されることを防止するためです。したがって、三つの場合について議論することができる。