【原创】浅谈指针(四) (2)

C语言中,一般不对返回值作强制转型。然而C++就不一样了。我们尝试执行不带强制转型的malloc,结果是:
error: invalid conversion from 'void*' to 'int*' [-fpermissive]

C++不允许把void*的指针赋值给其他类型。因此,如果要使用malloc,必须使用强制转型。相比较而言,还是new来的方便。
顺便提一句,NULL在stdio.h有些时候定义为(void*)0(当然更常见的是直接定义为0,没有void*),因此这种情况下就不能把NULL赋值给其他指针类型。对此C++规定把NULL直接定义为常量0,并专门拓展了nullptr。

nullptr

nullptr和C语言的NULL完全等价。

NULL的问题

假设有两个重载函数

void f(int i); void f(int* i); f(NULL);

执行最后一行的时候,由于0可以解释为指针也可以解释为整数,两个重载都可以匹配,导致出错。

nullptr

nullptr完全可以代替NULL赋值给指针,表示空地址。但是,不能把nullptr赋值给普通整数,
int n=nullptr;是非法的。
如果上面重载例子中把nullptr传入f的参数,结果会调用指针版本的f,这样不容易造成二义性。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzxgf.html