我厌倦了等待编译器支持nullptr
(gcc 4.6 does,但它是如此新的几个分布支持它)。完美模拟nullptr
因此,作为到nullptr
完全支持的止损,我决定效仿它。有两个仿真例子:一个来自here,另一个来自wikibooks。
值得注意的是,两种实现都没有提到operator ==
。但是,没有一个,下面的代码will not compile。
int* ptr = nullptr;
assert(ptr == nullptr); // error here: missing operator ==
这是operator ==
错误的编译器错误?
是operator ==
(和!=
,<
,<=
等)需要更完美地模拟nullptr
?
仿真的nullptr
和真正的交易有什么不同?
为什么你会这样做而不是'assert(ptr);'首先呢? – ildjarn 2011-06-07 17:23:16
@尼尔·巴特沃斯:事实并非如此。 'nullptr'必须是标准的一部分,因为只有当每个人都使用相同的空指针类型'std :: nullptr_t'时,它才具有值。如果每个人都实现了自己的空指针,那么如何编写一个接受空指针的函数呢?你不知道什么是空指针类型。 – Puppy 2011-06-07 17:28:08
@ildjarn:我用一个断言来清理代码。我的实际例子是'std :: remove(v.begin(),v.end(),nullptr);'它使用了相等运算符。而我不会只使用'std :: remove_if'的原因是我不想。我希望它能像真正的'nullptr'一样工作。 – 2011-06-07 17:41:29