esta pregunta no tiene problemas prácticos asociados a ella, es más una cuestión de curiosidad y ganas de saber si estoy tomando las cosas demasiado literalmente;).Defecto menor (sin importancia) en el estándar?
Así que han estado tratando de trabajar hacia la comprensión tanto de la norma C++ como sea posible. Hoy en mi profundizar en el estándar me di cuenta de esto (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.
parece bastante cuerdo para mí. Pero luego pensé, espera un segundo ¿cuál es la definición de data()
?
const charT* data() const;
yup, devuelve un const
charT*
.
Es evidente que la versión no const de operator[]
no se puede implementar como un simple return data()[pos]
continuación, ya que sería inicializar una referencia de tipo char&
partir de una expresión de tipo const char
.
creo que es obvio que la intención es que data()
implementarse algo así como return data_;
y operator[]
implementarse como return data_[pos];
o algo funcionalmente similares, pero eso no es lo que la norma dice: -P.
Si no recuerdo mal, los ejecutores tienen cierta libertad de acción que puedan poner en práctica las cosas como les plazca, siempre y cuando cumpla con los requisitos básicos dados y tiene el mismo efecto neto.
Así que la pregunta es, ¿estoy siendo manera demasiado literal, o este es el tipo de cosa que se consideraría un defecto.
EDIT: Vale la pena señalar que el proyecto de C++ 0x ha cambiado la redacción para:
Returns: If pos < size(), returns *(begin() + pos).
Otherwise, if pos == size(), the const version returns charT().
Otherwise, the behavior is undefined.
Así que tal vez sólo he tropezado con algo que ya se ha discutido.
Iba a sugerir mirando el nuevo proyecto de norma, pero que está muy por delante de mí. Pequeñas quejas como esta no son infrecuentes. –
Los estándares están escritos por personas, no por dioses :) –
@Nikolai: Por supuesto, tenía curiosidad por saber si este es el tipo de cosa que se consideraría un defecto o si estaba siendo demasiado literal en mis interpretaciones. –