今日、そのようなコードを C++ で記述してコンパイルできることを知りました。
int* ptr = new int(5, 6);
これの目的は何ですか?もちろん動的なことは知ってnew int(5)
いますが、ここで迷ってしまいます。手がかりはありますか?
今日、そのようなコードを C++ で記述してコンパイルできることを知りました。
int* ptr = new int(5, 6);
これの目的は何ですか?もちろん動的なことは知ってnew int(5)
いますが、ここで迷ってしまいます。手がかりはありますか?
コンマ演算子を使用しています。これは 1 つの値 (右端) のみに評価されます。
コンマ演算子 (,) は、式が 1 つだけ必要な場合に含まれる 2 つ以上の式を区切るために使用されます。値に対して式のセットを評価する必要がある場合、最も右側の式のみが考慮されます。
ポインタが指しているメモリアドレスは、上記の値 6 で初期化されます。
これを行うだけです:
int* ptr = new int(6);
コンマ演算子に関する限り、それなしでは目的のタスクを実行できない場合に使用します。次のようなトリックを適用する必要はありません。
int* ptr = new int(5, 6);
私のコンパイラ g++ は、これを行おうとするとエラーを返します。
これはどのコンパイラまたはコードで見られましたか?
ある種の 2D 配列を割り当てることを意味するのはバグだと思います。ただし、C++ ではそれを行うことはできません。このスニペットは、最後の式を返し、他のすべての結果を無視するカンマ演算子を使用しているため、実際にコンパイルされます。これは、ステートメントが次と同等であることを意味します。
int* ptr = new int(6);
5 は無視されます。これにより、ヒープに int が割り当てられ、(5,6) に初期化されます。
コンマ演算子で区切られた一連のステートメントの結果は最後のステートメントの値であるため、int は 6 に初期化されます。