2011-06-17 8 views
11

De N3290, [container.requirements.general]:std :: string - optimización de cadena pequeña y de intercambio

La expresión a.swap(b), para recipientes A y B de un tipo de contenedor estándar que no sea array, intercambiarán los valores de ayb sin invocar ninguna operación de movimiento, copia o intercambio en los elementos individuales del contenedor.

¿Cómo interactúa esto con la optimización de cadenas pequeñas? ¿Se les olvidó agregar std::string también?

+1

No creo que la cadena sea un "contenedor" en el sentido que se usa aquí. –

+0

@Logan: entonces la pregunta es: "¿es la cadena un contenedor?", Y si puede proporcionar una cita correcta, será la respuesta. – ybungalobill

+4

@ybungalobill: El hecho de que 'basic_string' no se describa en el capítulo' Containers Library' del FDIS es una buena pista. ; -] – ildjarn

Respuesta

11

(traspaso de comentario)

std::string no es un contenedor – el hecho de que basic_string no se describe en el capítulo Containers library (§23) del FDIS es una buena idea. ; -]

+0

¡Yay! ahora sé otra diferencia entre 'vector ' y 'string'! – ybungalobill

+3

21.4 ** utilizado para ** afirmar que basic_string era un contenedor, pero que obviamente se eliminó para el FDIS. –

+3

@Bo: sí, parece que tienes razón también. Pero es 21.3 en el estándar anterior, C++ 98: "basic_string cumple con los requisitos de un contenedor reversible". – ybungalobill

Cuestiones relacionadas