我厭倦了等待編譯器支持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