c++ - 我能保证nullptr的地址总是0吗?
问题描述
我知道NULL
总是这样0
,但是为什么下面的代码会打印消息?
#include <iostream>
using namespace std;
int main() {
int* ptr = nullptr;
if (ptr == 0) {
cout << "Does it always work?";
}
return 0;
}
解决方案
是的。
初始化的指针nullptr
是空指针。
将空指针与文字0
(或 a std::nullptr_t
,即nullptr
;它们一起是空指针常量)进行比较true
总是会产生 。
但是,您不能使用任何旧表达式来执行此操作;即使整数i
为 1,i-i
也不是有效的空指针常量,尽管在运行时计算为 0。如果您尝试这样做,您的程序将无法编译。只有文字 0
是可以与指针进行比较的有效空指针常量。
此外,这并不一定意味着它的所有位都为零!就像将 a 转换bool
为int
给你零或一一样,但实际的底层位bool
可以是实现喜欢的任何内容。
最后,请注意您的术语略有偏差;per [support.types.nullptr/1]
,nullptr
本身没有可取的地址
推荐阅读
- android - Android:如何使用 shouldShowRequestPermissionRationale 检查权限状态?
- html - 隐藏的项目未正确显示在我想要的位置
- nginx - 具有 ssl 拦截的 Kubernetes 入口/反向和正向代理
- r - plotly R中的多行不使用add_trace
- c# - 向 DataGrid 添加新行显示为空白
- eclipse - 将提交推送到 github 存储库时出现无法连接到任何 URI(未授权)错误
- c# - 在 ASP.NET MVC .Net5/.Net 核心中创建 GridView 的最佳方法
- typescript - 我可以定义一个由泛型扩展的类型吗?
- css - 如何修复 CSS 安全区域以在 iOS 14.5 中工作?
- python - 熊猫:从excel中拆分合并的标题