Geringfügiger (unwichtiger) Fehler im Standard?

8

Diese Frage hat keine praktischen Probleme, es ist eher eine Frage der Neugier und des Wunsches zu wissen, ob ich die Dinge zu wörtlich nehme;).

Ich habe also versucht, so viel wie möglich vom c ++ - Standard zu verstehen. Heute habe ich dies bei der Untersuchung des Standards festgestellt (ISO / IEC 14882: 2003 21.3.4):

%Vor%

Scheint mir ziemlich gesund zu sein. Aber dann dachte ich mir, warte mal, was ist die Definition von data() ?.

%Vor%

yup, es gibt eine const charT* zurück.

Offensichtlich kann die nicht-konstante Version von operator[] nicht als einfaches return data()[pos] implementiert werden, da dies eine Referenz vom Typ char& von einem Ausdruck vom Typ const char initialisieren würde.

Ich denke, dass es offensichtlich ist, dass die Absicht ist, dass data() so implementiert wird wie return data_; und operator[] als return data_[pos]; oder etwas funktional Ähnliches implementiert werden, aber das ist nicht was der Standard sagt :-P.

Wenn ich mich recht erinnere, haben die Implementierer Spielraum, indem sie Dinge so ausführen können, wie es ihnen gefällt, solange sie die grundlegenden Anforderungen erfüllen und den gleichen Nettoeffekt haben.

Die Frage ist also, ob ich Weg zu wörtlich bin, oder ist das die Art von Ding, die als ein Defekt betrachtet werden würde.

BEARBEITEN: Es ist erwähnenswert, dass der C ++ 0x-Entwurf den Wortlaut folgendermaßen geändert hat:

%Vor%

Vielleicht bin ich gerade auf etwas gestoßen, das bereits besprochen wurde.

    
Evan Teran 06.07.2010, 19:20
quelle

2 Antworten

6

Ja, es war ein Defekt und ja, das war die Lösung.

  

Ссылка

    
Charles Bailey 06.07.2010, 21:17
quelle
1

Ich nehme an, dass sie data() in der Definition anstatt data_ verwendet haben, weil sie genau in der öffentlichen Schnittstelle definieren wollten.

    
James Curran 06.07.2010 19:29
quelle

Tags und Links