同じ行で2つのint*を宣言する正しい方法が次のようになるようにC++が設計されたのはなぜですか
int *x, *y;
いいえ
int* x,y;
どちらの形式も避けて、すべての変数を独自の行で宣言する必要があると考える人もいますが、なぜこの言語の決定がなされたのか興味があります。
同じ行で2つのint*を宣言する正しい方法が次のようになるようにC++が設計されたのはなぜですか
int *x, *y;
いいえ
int* x,y;
どちらの形式も避けて、すべての変数を独自の行で宣言する必要があると考える人もいますが、なぜこの言語の決定がなされたのか興味があります。
Cコードとの互換性を維持するため。これがCの動作方法だからです。
Bjarneは彼のスタイルとテクニックのよくある質問で良い点を述べています:
int* p;
との間の選択はint *p;
、正しいか間違っているかではなく、スタイルと強調についてです。Cは表現を強調しました。宣言はしばしば必要な悪に過ぎないと考えられていました。一方、C ++は、型に重点を置いています。典型的なCプログラマーは、構文を強調
int *p;
して記述および説明し*p is what is the int
、スタイルの正確さを主張するためにC(およびC ++)宣言文法を指す場合があります。実際、*は文法の名前pにバインドされます。タイプを強調し
typical C++ programmer
て書いint* p;
て説明します。p is a pointer to an int
実際、pの型はint*です。私は明らかにその強調を好み、C++のより高度な部分をうまく使用するためにそれが重要であると考えています。
したがって、C ++でこのように機能する動機は、Cでどのように機能するかです。
Cでそのように機能する動機は、前述のように、Cが型ではなく表現を強調することです。
簡単な答えは次のとおりです。それがCのやり方だからです。もちろん、これは疑問を投げかけるだけです:なぜCはそれをこのようにするのですか?
初期のCの当初の哲学は、宣言は使用の正確なイメージであるというものでした。だからあなたが書くとき:
int *p;
、式*p
に型があることを宣言していますint
(コンパイラはそれにp
応じて実際の型を計算します)。
もちろん、これはCが導入された日typedef
以降は真実ではなくなりましたstruct
。そして、類似点は完全に消えましたconst
(最初にC ++で導入され、次にCに後付けされました)。
int *const p;
使用とは関係ありません。しかし、その時までに、サイコロが投げられました。
答え
それは「C」(「プレーンc」、「ピュアc」など)に由来します。
ポインタ変数がすでに宣言されている場合、次のように使用されます。
...
*p = &x;
*q = SomePointerFunc();
....
「c」の最初の発明者は、プログラマーが使用されているのと同じ構文で、変数識別子の前に星を付けてポインター変数を宣言することを望んでいたことを読みました。
...
int *p;
int *q;
...
同じことがアレイにも当てはまります。
...
x[5] = 'a';
y[77] = SomeItemFunc();
...
...
char x[5];
int y[100];
...
私が持っていた何人かの教師は、この方法で変数と関数の型を宣言することを主張します(識別子に近い星):
...
int *p;
int *q;
...
これの代わりに(タイプ識別子の横にある星):
...
int* p;
int* q;
...
追加
Javaや、C#などの他の言語では、配列の宣言またはポインターが型の横にあり、次の擬似コードのように、変数または関数の識別子だけが残ります。
*int p;
*int q;
char[5] x;
int[100] y;
私はこのテクニックが好きです。
乾杯。