Encontré un error en mi código donde comparé el puntero con '\ 0'.¿Por qué está bien comparar un puntero con ' 0'? (pero no 'A')
Preguntándome por qué el compilador no me advirtió sobre este error, intenté lo siguiente.
#include <cassert>
struct Foo
{
char bar[5];
};
int main()
{
Foo f;
Foo* p = &f;
p->bar[0] = '\0';
assert(p->bar == '\0'); // #1. I forgot [] Now, comparing pointer with NULL and fails.
assert(p->bar == 'A'); // #2. error: ISO C++ forbids comparison between pointer and integer
assert(p->bar[0] == '\0'); // #3. What I intended, PASSES
return 0;
}
¿Qué tiene especial sobre '\ 0' que hace que # 1 legal y # 2 sean ilegales?
Por favor, agrega una referencia o presupuesto a tu respuesta.
y 0 se convierte en 'nullptr' (en el lenguaje C++ 11) –
@BasileStarynkevitch, no creo que sea en este caso. La constante del puntero nulo se convierte directamente en el valor del puntero nulo del tipo apropiado. – avakar
Pero 'nullptr' denota el valor del puntero nulo del tipo apropiado ... –