Предположим, у меня есть следующий код:
#include <iostream>
#include <string>
#include <iomanip>
using namespace std; // or std::
int main()
{
string s1{ "Apple" };
cout << boolalpha;
cout << (s1 == "Apple") << endl; //true
}
Мой вопрос: как система проверяет эти два? s1
является объектом, а "Apple"
является строковым литералом в стиле C
Насколько я знаю, разные типы данных нельзя сравнивать. Что мне здесь не хватает?
c++
comparison
c-strings
stdstring
c++-standard-library
Адитья Пракаш
источник
источник
std::string
из c-строки.Ответы:
Это из-за следующего оператора сравнения, определенного для
std::string
Это позволяет сравнивать
std::string
иconst char*
. Таким образом, магия!Похищение комментария @Pete Becker :
источник
std::string from the C-style string and compare the two
std :: string objects. Вот почему этот оператор существует: он устраняет необходимость в этом временном объекте и накладные расходы, связанные с его созданием и уничтожением.