Der Vergleich von Zeichenketten mit == vergleicht die Adressen im Speicher, nicht den Inhalt der Zeichenketten. Das Verhalten ist von Compiler zu Compiler sowie von Plattform zu Plattform unterschiedlich. Du kannst statt dessen die Funktion strcmp() aus der Headerdatei <cstring> verwenden.
#include <iostream>
#include <cstring> // für strcmp()
int main()
{
const char *a;
a = "aaa";
a = "bbb";
if(std::strcmp(a, "aaa") == 0) {
std::cout << "1";
}
else if(std::strcmp(a, "bbb") == 0) {
std::cout << "2";
} else {
std::cout << "0";
}
return 0;
}