2011-07-06 18 views
5

Cuando se construye un std::string de un const char*, a menudo utilizo el siguiente patrón:lenguaje apropiado para la asignación std :: string

const char* p = GetString(); 
std::string s(p); 

supongo que podría utilizar el patrón similar:

const char* p = GetString(); 
std::string s = p; 

Pero , cuando deseo asignar, en lugar de construir, a un std::string desde un const char*, tengo demasiadas opciones:

s = p; 
s.assign(p); 
std::string(p).swap(s); 

¿Las opciones anteriores son más o menos equivalentes? ¿Cuál debería preferir, y por qué?

Respuesta

8

Ve por la legibilidad, y solo usa el idiomático operator= para la asignación. Además, construya directamente el std::string del const char*.

std::string s(GetString()); 
s = GetString(); 
+3

Prefiero s = GetString(); ya que no tiene ninguna posibilidad de darle una función accidental (Most Vexing Parse - http://en.wikipedia.org/wiki/Most_vexing_parse) – dascandy

1

Los dos primeros son básicamente lo mismo; assign tiene algunas sobrecargas más que le permiten hacer cosas interesantes. Yo elegiría el = sencillo, porque está más claro.

El último parece muy detallado y no intuitivo; No estoy seguro de por qué lo haría (a menos que estuviera desesperado por recuperar la memoria que está usando s).

2

El operador = y .assign son bastante idénticos, debería preferir el operador = formulario ya que es más legible.

Lo último no es lo mismo. Intercambiar el contenido reduce la cantidad de tiempo invertido en la construcción de un objeto dado, ya que no hace una copia, solo mueve el contenido. Su sintaxis primero copia p en std :: string y luego lo intercambia con s, que no es más eficiente que el resto ya que todavía está duplicando p. Si P hubiera sido una cadena estándar en otro lugar que estuvieras destruyendo de todos modos, esto sería más rápido.

3

Normalmente, usted acaba de hacer

std::string s = GetString();.

Para la asignación, haga

s = GetString();.

Esto significa que el objeto std::string tiene la máxima información disponible para producir la operación más rápida.

Cuestiones relacionadas