Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C和C+之间有一个细微的区别+; 以下C++语句在C++中无效: int *a = malloc(sizeof(*a));_C - Fatal编程技术网

C和C+之间有一个细微的区别+; 以下C++语句在C++中无效: int *a = malloc(sizeof(*a));

C和C+之间有一个细微的区别+; 以下C++语句在C++中无效: int *a = malloc(sizeof(*a));,c,C,为什么??你怎么修理它 答案是: C执行一个隐式转换 空*,而C++不。使用 显式cast可以解决这个问题 我的问题是:明确向谁和在哪里施展? 谢谢。 C++中你必须说 int *a = (int*)malloc(sizeof(*a)); 因为将void*强制转换为int*不是由编译器隐式完成的 更好的是,只需使用new和delete: int *a = new int(); C++中你必须说 int *a = (int*)malloc(sizeof(*a)); 因为将void*强制转换

为什么??你怎么修理它

答案是:

C执行一个隐式转换 空*,而C++不。使用 显式cast可以解决这个问题

我的问题是:明确向谁和在哪里施展? 谢谢。

C++中你必须说

int *a = (int*)malloc(sizeof(*a));
因为将
void*
强制转换为
int*
不是由编译器隐式完成的

更好的是,只需使用
new
delete

int *a = new int();
C++中你必须说

int *a = (int*)malloc(sizeof(*a));
因为将
void*
强制转换为
int*
不是由编译器隐式完成的

更好的是,只需使用
new
delete

int *a = new int();

你为什么在C++中使用MALLC来完成这个简单的任务?P. Answer将明确地将MALOC返回到int *。为什么您在C++中使用MALLC来执行这个简单的任务?P. Answer将Maloc的返回明确地转换为int型。如果必须强制使用C++强制转换。@ Drk EdDbBeTele:在这种情况下,建议是错误的——使用Casic的唯一原因是如果使用<代码> MalOC 而不是<代码>新< /代码>。唯一的借口是,如果你需要保持代码与C兼容——C++的C++会明显地被破坏。如果你想把它具体化为C++,就完全排除它。P.明显的例子:
realloc
的性能影响可能会证明使用C风格的libs是合理的(尽管分析而不是直觉应该指导这一点)。完全同意互操作性是主要的,虽然它不是“兼容C”,而是用任何语言编写的代码,不管什么原因,都会继续使用<代码> Malc /Cuff>免费< /COR> > @ Mehrdad:如果你可以原谅宠物的烦恼,“C++中你必须说……Malc(siZoof(*A));”-不,你不!与返回类似,
sizeof
不是一个函数;只有当它是一种类型时,这个参数才需要被括号化,所以“……Malc(siZOO**)”更好(尽管一些非常老的C++编译器显然对此哽咽了)。@托尼:我不知道Oxyo,但是我还是不打算用它。P不过,谢谢你指出这一点!如果必须强制转换,使用C++的cask.@ DrkEdelBueltLe:在这种情况下,建议是错误的——使用Casic的唯一原因是如果使用<代码> MalOC 而不是<代码>新< /C>。唯一的借口是,如果你需要保持代码与C兼容——C++的C++会明显地被破坏。如果你想把它具体化为C++,就完全排除它。P.明显的例子:
realloc
的性能影响可能会证明使用C风格的libs是合理的(尽管分析而不是直觉应该指导这一点)。完全同意互操作性是主要的,虽然它不是“兼容C”,而是用任何语言编写的代码,不管什么原因,都会继续使用<代码> Malc /Cuff>免费< /COR> > @ Mehrdad:如果你可以原谅宠物的烦恼,“C++中你必须说……Malc(siZoof(*A));”-不,你不!与返回类似,
sizeof
不是一个函数;只有当它是一种类型时,这个参数才需要被括号化,所以“……Malc(siZOO**)”更好(尽管一些非常老的C++编译器显然对此哽咽了)。@托尼:我不知道Oxyo,但是我还是不打算用它。P不过,谢谢你指出这一点!