To pytanie nie ma żadnych praktycznych problemów z nim związanych, to raczej kwestia ciekawości i chęć dowiedzenia się, czy mówię zbyt dosłownie;).Drobna (nieważna) wada w standardzie?
Tak więc staram się pracować nad zrozumieniem jak największej liczby standardów C++. Dziś w moim zagłębiając się w standardzie Zauważyłem to (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.
wydaje się całkiem rozsądny do mnie. Ale potem pomyślałem sobie, poczekaj sekundę, jaka jest definicja data()
?
const charT* data() const;
yup, to zwraca const
charT*
.
Wyraźnie const wersja operator[]
nie mogą być realizowane w prosty return data()[pos]
następnie od które byłyby inicjalizacji odniesienie typu char&
z ekspresją typu const char
.
myślę, że jest oczywiste, że intencją że data()
być realizowane coś return data_;
i operator[]
być realizowane jako return data_[pos];
lub coś podobnego funkcjonalnie, ale to nie to, co standardowe mówi :-P.
Jeśli dobrze pamiętam, realizatorzy mają pewną swobodę w tym, że mogą realizować swoje zadania tak długo, jak spełniają podstawowe wymagania i mają taki sam efekt netto.
Pytanie brzmi: czy jestem zbyt dosłowny, czy jest to rodzaj rzeczy, która mogłaby zostać uznana za wadę.
EDIT: Warto zauważyć, że C++ 0x projekt zmienił sformułowanie:
Returns: If pos < size(), returns *(begin() + pos).
Otherwise, if pos == size(), the const version returns charT().
Otherwise, the behavior is undefined.
Więc może właśnie natknął się na coś, co już zostało omówione.
miałem zamiar zaproponować spojrzenie na nowego projektu normy, ale jesteś droga przede mną. Takie małe niedociągnięcia nie są rzadkością. –
Standardy są pisane przez ludzi, a nie przez bogów :) –
@Nikolai: Oczywiście, byłem po prostu ciekawy, czy to jest typ rzeczy, która byłaby uważana za wadę lub gdybym był zbyt dosłowny w moich interpretacjach. –