Вы должны понимать, что такое std::cout
и почему он обрабатывает char*
как «строку».
Начнем:
std::cout
- это экземпляр * У 1008 * и std::ostream
много операторов. Что это значит?
Реализация std::ostream
может, но здесь только в качестве примера, написанного как:
class ostream
{
// ... a lot more code for constructors and others
ostream& operator <<( const int );
ostream& operator <<( const double );
ostream& operator <<( char* ); <<< this is the implementation you search for!
// a long list of more special overloads follow
};
И реализация просто выводит "строку", char * указывает на.
То, что вы видите, - это просто специальная перегрузка operator<<
для класса std::ostream
.
Хорошо, в реальной реализации используется перегрузка, не являющаяся членом, но это не важно для понимания принципа работы std::ostream
.
Подробнее см .: std :: ostream :: operator << () </a>
Символьные и символьные аргументы строки (например, типа char или const char *) обрабатываются перегрузками оператора <<, не являющимися членами. Попытка вывести символ с использованием синтаксиса вызова функции-члена (например, std :: cout.operator << ('c');) вызовет одну из перегрузок (2-4) и выведет числовое значение. Попытка вывести символьную строку с использованием синтаксиса вызова функции-члена вызовет перегрузку (7) и вместо этого напечатает значение указателя. </p>