问题描述
- 空指针0可以被隐式类型转换为整型,会带来什么隐患?
-
以前都是用0来表示空指针的,但由于0可以被隐式类型转换为整形,这就会存在一些问题。
解决方案
- 一个是语义上的,NULL用来表示空指针,而0是数字的概念,分别开来,从语法上好理解和区分,防止混淆
- 防止隐式转换,比如该是指针的地方,却用了数字,该是数字的地方却用了指针。
- 所以在C++11中,引入了nullptr的关键字来代替NULL,它就不是数字0了
解决方案二:
有一些细节问题,比如
if (p = 0)
由于将==写成了=,结果将p设置为野指针了
再比如 **p 被误写作 *p,这种错误很难发现。
解决方案三:
定义 NULL 只是为了方便代码的阅读,NULL 本身就是 0
解决方案四:
除了看起来不一样,其他都一样
解决方案五:
指针就是计算机内存地址,也就是整形。 0即空指针,没啥隐患。
解决方案六:
1楼和2楼的同学已经给出了答案,同意。
解决方案七:
NULL这是0,本身没什么问题,只是你做逻辑判断的时候容易出错,最好用nullptr,代替。
#define NULL 0
int a=NULL; 没问题,如果写成int a=nullptr, 就不行了,所以防止出错。
解决方案八:
C中本来指针就 不能算整数,只是可以用整数表示
C++ 干脆用 0 表示 NULL指针;
这样遇到 函数重载 参数分别是 整数和指针 的时候,
传入NULL指针,
容易出现二义性错误
这是个很麻烦,但是有很少遇到的特性
一旦出现,就会很麻烦
nullptr 则不会
所以有编译器定义了nullptr,标准也采用了
此前有些书籍,也讨论过这个问题.
解决方案九:
路过水一贴,O(∩_∩)O。
时间: 2024-12-03 06:09:33