【发布时间】:2020-12-17 09:08:31
【问题描述】:
这可能是一个非常基本的问题,但我试图在 SO 中找到答案,但找不到确切的答案。
用nullptr 初始化const 指针有什么意义?
int *const pi = nullptr;
为什么编译器不发出警告或错误,看到指针pi 不能在程序的任何地方有效使用?
我试过用g++ -w编译这个。
另外,您能否给出一些用例,在实际代码中,const 指针将初始化为 nullptr 以实现有效目的?
【问题讨论】:
-
因为 nullptr 不是无效的。我猜对于像“pi”这样的数值来说,它并没有什么意义,但这是你作为开发人员的选择。它仍然是有效的代码。举个例子,我可以想象有一个(const)指针故意为空(永远),因为根据类的实例化某些功能被禁用。
-
nullptr是一个有效的指针值,没有理由不应该被允许。if(something == pi)仍然有效。 -
"pi 不能在程序的任何地方有效使用。"你为什么这么认为?我可以在任何可以使用
nulltpr的地方有效使用。没有错,只是给nullptr起一个不同的名字不是很有用 -
为什么要禁止这个?同样,您可以说为什么应该禁止
(true and false and true and false)之类的东西,因为无论如何它的计算结果为false。没有标准来检查您的语义。 -
规范性文件中没有任何内容需要在这种情况下进行诊断,因此没有“应该”。如果有的话,您声明了一个合法的不可变空对象(模式)