Diese Frage hat keine praktischen Probleme damit, es ist mehr eine Frage der Neugier und wollen wissen, ob ich die Dinge zu wörtlich nehmen;).Geringer (unwichtiger) Defekt im Standard?
Also habe ich versucht, so viel von dem C++ - Standard wie möglich zu verstehen. Heute in meinem Delving in den Standard Ich bemerkte diese (ISO/IEC 14882: 2003 21.3.4):
const_reference operator[](size_type pos) const;
reference operator[](size_type pos);
Returns: If pos < size(), returns data()[pos].
Otherwise, if pos == size(), the const version returns charT().
Otherwise, the behavior is undefined.
Scheint ziemlich vernünftig zu mir. Aber dann dachte ich mir, warte mal, was ist die Definition von data()
?
const charT* data() const;
yup, gibt es ein const
charT*
.
Klar, dass die nicht-const-Version von operator[]
kann nicht als einfaches return data()[pos]
da diese dann umgesetzt werden würde char&
einen Verweis vom Typ aus einem Ausdruck des Typs const char
wird initialisiert.
Ich denke, dass es offensichtlich ist, dass die Absicht ist, dass data()
so etwas wie return data_;
umgesetzt werden und operator[]
als return data_[pos];
oder etwas funktionell ähnlich umgesetzt werden, aber das ist nicht das, was der Standard sagt :-P.
Wenn ich mich recht erinnere, haben die Implementierer einen gewissen Spielraum darin, dass sie Dinge implementieren können, wie sie wollen, solange sie die grundlegenden Anforderungen erfüllen und den gleichen Nettoeffekt haben.
Also die Frage ist, bin ich Weg zu wörtlich, oder ist das die Art der Sache, die als ein Defekt betrachtet werden würde.
EDIT: Es ist erwähnenswert, dass die C++ 0x Entwurf die Formulierung geändert hat:
Returns: If pos < size(), returns *(begin() + pos).
Otherwise, if pos == size(), the const version returns charT().
Otherwise, the behavior is undefined.
Ich habe gerade stolperte auf etwas, das diskutiert wurde also vielleicht schon.
ich auf dem neuen Standard-Entwurf vorschlagen würde suchen, aber du bist von mir weit voraus. Kleine Nigger wie diese sind nicht ungewöhnlich. –
Standards werden von Menschen geschrieben, nicht von Göttern :) –
@Nikolai: Natürlich war ich nur neugierig, ob das die Art von Sache ist, die als Defekt betrachtet werden würde oder ob ich in meinen Interpretationen ein bisschen zu wörtlich wäre. –