В случае, если OP интересуется тем, как строки реализованы в STL, они используют целый класс вспомогательного вызова char_traits. Это класс, в котором нет ничего, кроме статических функций-членов, а char_traits специализируется на использовании char и wchar_t функций библиотеки времени выполнения C, таких как memmove.
Например, у вас есть функция сравнения, которая возвращает значение <0, 0 или> 0. Где тип char, он может использовать memcmp. Если тип wchar_t, он может использовать широкий эквивалент.
Это работает примерно так:
template< typename Element >
class char_traits
{
public:
static int compare( const Element * left, const Element * right, size_t length )
{
for( const Element * end = left + length; left != end; ++left )
{
if( left < right )
return -1;
else if( left > right )
return 1;
}
return 0;
}
// other functions
};
template <> class char_traits<char> // I think this is the syntax
{
public:
int compare( const char * left, const char * right, size_t len )
{
return memcmp( left, right, len ); // more efficient than the general loop above
}
// other functions
};
// specialise also for wchar_t