Ho il seguente codice C++:Cast in costruttori per C++ di tipo
#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;
}
Il risultato è: Perché? Quando uso -Wall bandiera, avviso del compilatore di scrittura: l'indirizzo del 'std :: string s2 (std :: string)' sarà sempre valutare come 'vero'
Ma questo codice:
#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;
}
il risultato: ddd
E 'risultato normale
Impossibile basta fare la seconda linea 's2 std :: string (S1);' Perché è necessario includi il secondo 'std :: string'? – rhololkeolke
Perché creare una copia intermedia? Perché non 'std :: string s2 = s1;'? –
@Oscar: la versione crea una variabile inizializzata predefinita intermedia e quindi copia tramite l'operatore di assegnazione copia. La versione corretta senza nulla di intermedio è rho's. – Xeo