在编程逻辑世界,有因必有果,如果一个结果含糊不定(二义性),显然是我们不想要的。C++11中引入nullptr是为了解决NULL的二义性问题。
NULL二义性的体现
1 | void func(int) {} |
当函数调用func(NULL)时会是怎样执行?
先看C++对NULL的定义:1
2
3
4
5
我们可以看到C++的NULL被宏定义为0,所以函数func(NULL)
会因为NULL为0而导致调用func(int)
函数,这是我们不想要的结果。
那怎么解决问题呢?
使用nullptr(空指针常量),当函数调用func(nullptr)
时则会调用func(int *)
函数。