Załóżmy, że mam następujący kod:
#include <iostream>
#include <string>
#include <iomanip>
using namespace std; // or std::
int main()
{
string s1{ "Apple" };
cout << boolalpha;
cout << (s1 == "Apple") << endl; //true
}
Moje pytanie brzmi: w jaki sposób system sprawdza między tymi dwoma? s1
jest obiektem, podczas gdy "Apple"
jest literałem ciągowym w stylu C.
O ile mi wiadomo, nie można porównywać różnych typów danych. Czego tu brakuje?
c++
comparison
c-strings
stdstring
c++-standard-library
Aditya Prakash
źródło
źródło
std::string
z ciągu c.Odpowiedzi:
Jest tak z powodu zdefiniowania następującego operatora porównania
std::string
Pozwala to na porównanie między
std::string
iconst char*
. Zatem magia!Kradzież komentarza @Pete Becker :
źródło
std::string from the C-style string and compare the two
std :: string. Właśnie dlatego ten operator istnieje: eliminuje potrzebę tego tymczasowego obiektu i koszty związane z jego tworzeniem i niszczeniem.