【发布时间】:2011-09-10 06:42:20
【问题描述】:
我已经厌倦了等待 nullptr 的编译器支持(gcc 4.6 does,但支持它的发行版太新了)。
因此,在完全支持nullptr 之前,我决定效仿它。有两个模拟示例:一个来自here,一个来自wikibooks。
值得注意的是,两个实现都没有提到operator ==。但是,没有之一,下面的代码will not compile。
int* ptr = nullptr;
assert( ptr == nullptr ); // error here: missing operator ==
这个operator == 错误是编译器错误吗?operator ==(和 !=、<、<= 等)是否需要更完美地模拟 nullptr?
模拟的nullptr 和真正的交易之间还有什么不同?
【问题讨论】:
-
一开始你为什么要这样做而不是
assert(ptr);? -
@Neil Butterworth:这不是真的。
nullptr必须是标准的一部分,因为它只有在每个人都使用相同的空指针类型时才有价值 -std::nullptr_t。如果每个人都实现了自己的空指针,你将如何编写一个接受空指针的函数?你不知道空指针类型是什么。 -
@ildjarn:我使用了一个断言来清理代码。我的实际示例是使用相等运算符的
std::remove( v.begin(), v.end(), nullptr );。我不会只使用std::remove_if的原因是我不想。我希望它像真正的nullptr一样工作。 -
很公平,我没有考虑标准库中的含义。