Tengo el siguiente código C++:moldeada en los constructores de tipo C++
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
const std::string s1 = "ddd";
std::string s2(std::string(s1));
std::cout << s2 << std::endl;
}
El resultado es: 1 ¿Por qué? Cuando uso -Wall bandera, advertencia del compilador de escritura: la dirección de 'std :: cadena s2 (std :: string)' siempre evaluará como 'verdadero'
Pero este código:
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
const std::string s1 = "ddd";
std::string s2((std::string)(s1));
std::cout << s2 << std::endl;
}
el resultado: ddd
es resultado normal
No podría usted acaba de hacer la segunda línea s2 std :: string (S1); '¿Por qué necesita incluir el segundo 'std :: string'? – rhololkeolke
¿Por qué crear una copia intermedia? ¿Por qué no 'std :: string s2 = s1;'? –
@Oscar: su versión crea una variable inicializada por defecto intermedia y luego copia mediante el operador de asignación de copias. La versión correcta sin nada intermedio es la de rho. – Xeo