Ваш пример на самом деле демонстрирует обратное: массив константных символов интерпретируется как std::string
.(Кстати, строковый литерал не является const char *
, это const char[N]
- массив символов, а не указатель на символ).
Причина, по которой он работает, заключается в том, что массив символов неявно преобразуется в std::string
с помощью конструктора преобразования std::string
s.Компилятор выполняет преобразование для вас в полном соответствии с правилами разрешения перегрузки языка C ++.