Konstante Elementfunktionen sollten keine ``Handles'' auf Datenelemente zurückgeben.
Kann man B trauen???
Beispiel:
class string { char *data; public: operator char *() const; }; string::operator char *() const { return data; } const string B("I'm const"); char *str = B; // ruft den operator char* strcpy(str,"NoNoNo");
Dadurch wird das private data Element überschrieben.
Der Fehler liegt im Operator char *(), der ein ``Handle'' auf data liefert und andererseits als const markiert ist. Dadurch kann er auf konstante Objekte angewandt werden.
Bessere Lösung:
string::operator char *() const { char *copy = new char [strlen(data)+1]; strcpy(copy,data); return copy; }