2011-04-07 68 views
0

以下C語句在C++中無效。C和C++之間的細微差別

int *a = malloc(sizeof(*a)); 

爲什麼?你如何解決它?

答案是:

Ç執行用於 無效*的隱式轉換,而C++沒有。使用 顯式強制轉換來解決此問題。

我的問題是:明確施放給誰和在哪裏? 謝謝。

+2

::P

更重要的是,只要使用newdelete。答案是明確地將malloc的返回值轉換爲int *。 – dcousens 2011-04-07 01:21:00

回答

5

在C++中,你不得不說

int *a = (int*)malloc(sizeof(*a)); 

因爲鑄造void*int*沒有隱含由編譯器完成。爲什麼在C使用malloC++這個簡單的任務,反正...

int *a = new int(); 
+3

如果您必須投射,請使用C++強制轉換。 – 2011-04-07 01:22:37

+1

@Dirk Eddelbuettel:在這種情況下,這個建議是錯誤的 - 使用強制轉換的唯一原因是如果你使用'malloc'而不是'new'。這樣做的唯一藉口就是如果你需要保持你的代碼與C兼容,C++會明顯中斷它。如果你打算使它特定於C++,那麼完全消除這個演員陣容。 – 2011-04-07 01:40:32

+0

@Jerry:「* only * excuse」有點誇大了; -P。明顯的例子:'realloc'的性能影響可以證明C風格庫的使用是正確的(儘管分析而不是直覺應該指導這一點)。非常贊同互操作性是主要的,儘管它不僅僅是「與C兼容」,而且任何用任何語言編寫的代碼(無論出於何種原因)都會繼續使用'malloc' /'free'。 – 2011-04-07 03:51:13