回答編集履歴
1
誤字修正
answer
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
-
一言で言うと、CとC++は別の言語であり、完全な上位互換ではないからです。CでコンパイルできるコードがC++ではできないということはよくありますが、その原因の1つに、void型のポインタから任意の型のポインタへの暗黙の型変換がC++では採用されなかったというのがあります。C++で同じことをする場合、キャストをする必要が出てきます。今回の場合、
|
1
|
+
一言で言うと、CとC++は別の言語であり、完全な上位互換ではないからです。CでコンパイルできるコードがC++ではできないということはよくありますが、その原因の1つに、void型のポインタから任意の型のポインタへの暗黙の型変換がC++では採用されなかったというのがあります。C++で同じことをする場合、キャストをする必要が出てきます。今回の場合、Chironianさんの示す「reinterpret_cast」で変換…する必要はありません。
|
2
2
|
|
3
|
-
キャストは悪です(暴論)。避けられるなら避けるべきです。mallocを使用する場面で、との相談でしたが、C++では言語機能として、new/deleteによるメモリ確保/解放ができるので、mallocを使う必要はありません。
|
3
|
+
キャストは悪です(暴論)。避けられるなら避けるべきです。mallocを使用する場面で、との相談でしたが、C++では言語機能として、new/deleteによるメモリ確保/解放ができるので、mallocを使う必要はありません。
|
4
|
+
|
5
|
+
追記: さらに言えば、new/deleteも避けるべきです。STLのコンテナを利用すれば、これらに依存しないコードも書けますよ。
|