Qual é a diferença entre std::string
e std::basic_string
? E por que ambos são necessários?
95
std::basic_string
é um modelo de classe para fazer strings de tipos de caracteres, std::string
é um typedef
para uma especialização desse modelo de classe para char
. Sim, ambos são necessários (ou pelo menos exigidos pela norma).
std::string
é uma instanciação destd::basic_string<T>
:typedef std::basic_string<char> string
std::basic_string
é necessário ter uma interface semelhante para todos os tipos de strings (wstring
por exemplo).fonte
string
é uma especialização debasic_string
.namespace std { typedef basic_string<char> string; }
Tecnicamente, não é realmente uma instanciação, mas é pelo menos mais próximo (instanciação, por definição, cria uma instância, e um typedef apenas cria um nome, não uma instância )A
std::string
é uma instanciação dostd::basic_string
modelo com um tipo dechar
. Você precisa de ambos para poder fazer cadeias de outras coisaschar
, comostd::basic_string<wchar_t>
para uma cadeia de caracteres largos. Ou se você quiser uma string com elementos de 32 bitsstd::basic_string<unsigned int>
,.fonte
std::basic_string
sem umchar
tipo.Apenas uma pequena adição ao que todos os outros responderam. Como
std::string
é uma especializaçãobasic_string
dele também padrão alguns outros parâmetros exceto o tipo de char. Uma basic_string pode ter um tipo de char personalizado (por exemplo, basic_string pode ter wide_chars), um char_trait personalizado (por exemplo, basic_string pode ter caracteres largos, mas suporta todas as operações de caracteres normais) , e um alocador personalizado (um basic_string pode ter algumas informações extras empacotadas com ele para um depurador personalizado ou um gerenciamento de memória estática).Utilidade
O
std::string
padrão de todos esses parâmetros para valores razoáveis já que na maioria dos casos você só precisa de umstd::string
e esta é a sua utilidade. Por outro lado, sempre que precisar de algo mais personalizado você temstd::basic_string
. Então, ambos têm seus propósitos diferentesfonte