私は.NETの開発者で、iPhoneに近づいています。iPhoneと.NETではconstキーワードがどのように異なるのですか?
私は.NETで通常は読みやすいように名前付き定数を使用していました。 iPhoneのdevにはconstキーワードがありますが、この例では#defineを使用した例がほとんどです。
2つの実装の実際の違いは何ですか? ボーナスに関する質問:いつ、どのように使用すべきですか、使用すべきではありませんか?
私は.NETの開発者で、iPhoneに近づいています。iPhoneと.NETではconstキーワードがどのように異なるのですか?
私は.NETで通常は読みやすいように名前付き定数を使用していました。 iPhoneのdevにはconstキーワードがありますが、この例では#defineを使用した例がほとんどです。
2つの実装の実際の違いは何ですか? ボーナスに関する質問:いつ、どのように使用すべきですか、使用すべきではありませんか?
定数はObjective-Cで宣言して振る舞う方法を議論するように、他の質問の数がありますが、あなたは以下をご覧ください:
Significance of const keyword positioning in variable declarations
C#と比較するには、Obj-Cのconst
は基本的にC言語のものと同じです(Obj-Cはsupeです実際にはCのrset)。 Obj-Cでは、定数はグローバルスコープで宣言されており、コンパイル時に既知の値に初期化する必要があります。 Objective-Cは定数をクラスメンバとしてサポートしていません。 C#では、定数は常にクラス(または構造体)のメンバーであり、コンパイル時に既知の値を使用して初期化する必要があります。 C##define
では、定義されたシンボルに値を関連付けることはできず、条件付きコンパイルパス(#if
と#else
を使用)を選択することができます。これは全く異なります。
#define
を使用して定数を宣言することについては、可能な限り個人的にこれを避けるようにしています。 #defined
の値は、コンパイル時にコードに代入されるだけで、異なるコンテキストでは異なる解釈が可能です。名前の衝突を導入することも可能で、予期せず値の再定義が行われる可能性があります。可能であればconst
を使用し、必要なときには#define
を使用することをお勧めします。
#defines
は、最終コードで置き換えられるプリプロセッサマクロです。このように、それらは一度定義された価値を持ち、無料でアクセスできます。一方、const
は、コンパイラが処理する変数を静的に割り当てるだけです。そのため、ほとんどの作業ではconst
ではなく#define
を使用します(むしろ)。
switch文には、#defined'd
の定数だけを使用できます。
便利な情報、ありがとう:) –
可能な限りconstを使用する必要がある場合にのみ#を定義します。 –