NULL与nullptr二义性问题

在编程逻辑世界,有因必有果,如果一个结果含糊不定(二义性),显然是我们不想要的。C++11中引入nullptr是为了解决NULL的二义性问题。

NULL二义性的体现

void func(int) {}
void func(int *) {}

当函数调用func(NULL)时会是怎样执行?

先看C++对NULL的定义:

#if defined(__cplusplus) 
# define NULL 0 /* C++中使用0作为NULL的值 */
#else 
# define NULL ((void *)0) /* C中使用((void *)0)作为NULL的值 */ 
#endif

我们可以看到C++的 NULL宏定义为0 ,所以函数 func(NULL) 会因为NULL为0而导致调用 func(int) 函数,这是我们不想要的结果。

那怎么解决问题呢?

使用nullptr(空指针常量),当函数调用 func(nullptr) 时则会调用 func(int *) 函数。

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章