以下C语句在C++中无效。C和C++之间的细微差别
int *a = malloc(sizeof(*a));
为什么?你如何解决它?
答案是:
Ç执行用于 无效*的隐式转换,而C++没有。使用 显式强制转换来解决此问题。
我的问题是:明确施放给谁和在哪里? 谢谢。
以下C语句在C++中无效。C和C++之间的细微差别
int *a = malloc(sizeof(*a));
为什么?你如何解决它?
答案是:
Ç执行用于 无效*的隐式转换,而C++没有。使用 显式强制转换来解决此问题。
我的问题是:明确施放给谁和在哪里? 谢谢。
在C++中,你不得不说
int *a = (int*)malloc(sizeof(*a));
因为铸造void*
到int*
没有隐含由编译器完成。为什么在C使用malloC++这个简单的任务,反正...
int *a = new int();
如果您必须投射,请使用C++强制转换。 – 2011-04-07 01:22:37
@Dirk Eddelbuettel:在这种情况下,这个建议是错误的 - 使用强制转换的唯一原因是如果你使用'malloc'而不是'new'。这样做的唯一借口就是如果你需要保持你的代码与C兼容,C++会明显中断它。如果你打算使它特定于C++,那么完全消除这个演员阵容。 – 2011-04-07 01:40:32
@Jerry:“* only * excuse”有点夸大了; -P。明显的例子:'realloc'的性能影响可以证明C风格库的使用是正确的(尽管分析而不是直觉应该指导这一点)。非常赞同互操作性是主要的,尽管它不仅仅是“与C兼容”,而且任何用任何语言编写的代码(无论出于何种原因)都会继续使用'malloc' /'free'。 – 2011-04-07 03:51:13
::P
更重要的是,只要使用
new
和delete
。答案是明确地将malloc的返回值转换为int *。 – dcousens 2011-04-07 01:21:00