Me cansé de esperar la compatibilidad del compilador de nullptr
(gcc 4.6 does pero son tan pocas las nuevas distribuciones que lo admiten).Perfectamente emular nullptr
Por lo tanto, como un espacio de detención hasta nullptr
es totalmente compatible, decidí emularlo. Hay dos ejemplos de emulación: uno de here, y uno de wikibooks.
De nota, ninguna implementación menciona un operator ==
. Sin embargo, sin uno, el siguiente código will not compile.
int* ptr = nullptr;
assert(ptr == nullptr); // error here: missing operator ==
¿Es este error operator ==
un error del compilador?
Es operator ==
(y !=
, <
, <=
, etc.) necesarios para emular más perfectamente nullptr
?
¿Qué más es diferente entre un emulado nullptr
y el verdadero?
¿Por qué harías esto en vez de 'assert (ptr);' en primer lugar? – ildjarn
@Neil Butterworth: Eso no es verdad. 'nullptr' tiene que ser parte del Estándar porque solo tiene valor cuando todos usan el mismo tipo de puntero nulo -' std :: nullptr_t'. Si todos implementaran su propio puntero nulo, ¿cómo escribirías una función que aceptaría un puntero nulo? No sabe cuál es el tipo de puntero nulo. – Puppy
@ildjarn: utilicé una afirmación para limpiar el código. Mi ejemplo real era 'std :: remove (v.begin(), v.end(), nullptr);' que usa el operador de igualdad. Y la razón por la que no usaré 'std :: remove_if' es que no quiero. Quiero que funcione como el verdadero 'nullptr'. –