誰かが私に違いは何ですか教えてもらえますか
void fun(MyClass &mc);
と
void fun(MyClass& mc);
C ++では?
誰かが私に違いは何ですか教えてもらえますか
void fun(MyClass &mc);
と
void fun(MyClass& mc);
C ++では?
与えられたものはありません。
もともと、C では次のことが許可されていました。
int x, *y;
と int へのポインタの両方int
を宣言するには、 .x
y
したがって、型の定義の一部 (型をポインターにするビット) は、別の部分から分離できます。
C++ はこのホールセールをコピーしました。
&
次に、追加された場所を参照し、ではなくwith を除いて同様のスタイルの宣言を取得しました*
。これは、 と の両方が許可されたことを意味しMyClass &mc
ますMyClass& mc
。
の選択について*
、Strousupは次のように書いています。
どちらも有効な C および C++ であり、まったく同じ意味を持つという意味で、どちらも「正しい」ものです。言語定義とコンパイラに関する限り、「int*p;」と言うのも同じです。または「int * p;」
「int* p;」の選択 および「int *p;」正しいか間違っているかではなく、スタイルと強調についてです。C強調表現; 宣言はしばしば必要悪にすぎないと考えられていました。一方、C++ は型に重点を置いています。
「典型的な C プログラマー」は「int *p;」と書きます。そして、構文を強調する「*p は int とは何か」を説明し、スタイルの正確さを主張するために C (および C++) 宣言文法を指す場合があります。実際、* は文法で名前 p にバインドされます。
「典型的な C++ プログラマー」は「int* p;」と書きます。そして、「pはintへのポインタです」と型を強調して説明しています。実際、p の型は int* です。私は明らかにその強調を好んでおり、C++ のより高度な部分をうまく使用するために重要であると考えています。
重大な混乱は、人々が単一の宣言で複数のポインターを宣言しようとした場合にのみ発生します。
int* p、p1; // 考えられるエラー: p1 は int ではありません*
* を名前の近くに配置しても、この種のエラーの可能性が大幅に低下するわけではありません。
int *p, p1; // エラーの可能性?
宣言ごとに 1 つの名前を宣言すると、特に変数を初期化するときに問題が最小限に抑えられます。人々は次のように書く可能性ははるかに低いです:
int* p = &i; int p1 = p; // エラー: int* によって初期化された int
もしそうなら、コンパイラは文句を言うでしょう。
何かが 2 つの方法で実行できる場合はいつでも、誰かが混乱します。何かが好みの問題である場合はいつでも、議論は永遠に続く可能性があります. 宣言ごとに 1 つのポインターに固執し、常に変数を初期化すると、混乱の原因がなくなります。C 宣言構文の詳細については、C++ の設計と進化を参照してください。
さらに、 に関しては、「典型的な C++」スタイル&
に一致します。MyClass& mc
コンパイラには違いはありません。
前者は通常の C 構文に近く、後者はより C++ 風です。