C/C++使用malloc隐式void*cast

PSI*_*Alt -1 c c++ language-lawyer

关于以下代码片段的问题

  char *p = malloc(10);
Run Code Online (Sandbox Code Playgroud)

当我编译它gcc的任何-std=,这并编译好.

但是使用g ++,-std=这会产生错误:

w.c:4:21: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive]
  char *p = malloc(10);
Run Code Online (Sandbox Code Playgroud)

为什么行为不同?我认为用C编译的所有行都应该用C++编译器编译.这有什么标准要求吗?

Sto*_*ica 5

因为你的编译CgccC++使用g++.那些是不同的语言.

C++对于来自void*go的隐式转换,输入更强.

  • "C++有更严格的类型检查"是一个都市传奇......这种情况的不同之处在于C已经从`void*`隐式转换为其他对象指针类型,仅此而已.这两种语言都是静态类型,两种语言都提供转换 - 只需要一种语言就需要转换. (6认同)