6

今日、そのようなコードを C++ で記述してコンパイルできることを知りました。

int* ptr = new int(5, 6);

これの目的は何ですか?もちろん動的なことは知ってnew int(5)いますが、ここで迷ってしまいます。手がかりはありますか?

4

5 に答える 5

13

コンマ演算子を使用しています。これは 1 つの値 (右端) のみに評価されます。

コンマ演算子 (,) は、式が 1 つだけ必要な場合に含まれる 2 つ以上の式を区切るために使用されます。値に対して式のセットを評価する必要がある場合、最も右側の式のみが考慮されます。

ソース

ポインタが指しているメモリアドレスは、上記の値 6 で初期化されます。

于 2010-02-26T23:42:44.803 に答える
1

これを行うだけです:

int* ptr = new int(6);

コンマ演算子に関する限り、それなしでは目的のタスクを実行できない場合に使用します。次のようなトリックを適用する必要はありません。

int* ptr = new int(5, 6);
于 2010-02-27T05:08:34.287 に答える
1

私のコンパイラ g++ は、これを行おうとするとエラーを返します。

これはどのコンパイラまたはコードで見られましたか?

于 2010-02-26T23:43:44.553 に答える
1

ある種の 2D 配列を割り当てることを意味するのはバグだと思います。ただし、C++ ではそれを行うことはできません。このスニペットは、最後の式を返し、他のすべての結果を無視するカンマ演算子を使用しているため、実際にコンパイルされます。これは、ステートメントが次と同等であることを意味します。

int* ptr = new int(6);
于 2010-02-26T23:44:57.937 に答える
1

5 は無視されます。これにより、ヒープに int が割り当てられ、(5,6) に初期化されます。

コンマ演算子で区切られた一連のステートメントの結果は最後のステートメントの値であるため、int は 6 に初期化されます。

于 2010-02-26T23:45:10.437 に答える