Alcune classi che incontro, hanno una doppia costruttore di stringa:efficiente stringa del costruttore
construct(const std::string& s);
construct(const char* s);
Avere un costruttore std::string
ha il vantaggio evidente di essere in grado di passare un std::string
senza c_str()
. Tuttavia, se l'argomento è memorizzato in una stringa std :: anyway, c'è qualche vantaggio di avere il costruttore const char*
?
In particolare:
construct(const std::string& s) : m_string(s) {}
construct(const char* s) : m_string(s) {}
std::string m_string;
Sarà il secondo costruttore di essere più veloce per stringhe e char*
variabili, o sarà ottimizzato via?
Domanda aggiuntiva - C++ 11 sposta la costruzione cambia qualcosa qui?
In C++ 11 con la costruzione dello spostamento, è possibile utilizzare questo (come un singolo ctor per entrambi): 'construct (std :: string s): m_string (std :: move (s)) {}'. Non efficiente quanto un inoltro perfetto, ma quasi (due mosse per un temporaneo). – dyp
'std :: string (" Hello There ")' Ecco perché hai un costruttore per un 'const char *', ma non sono sicuro di cosa stai chiedendo qui ... – user2485710
non deve essere più veloce, è solo un secondo costruttore sovraccarico per una gestione più semplice – Alex