为什么下面没有调用重载的运算符==(const String&,const String&)?"cobble"=="stone"

sur*_*der 4 c++

为什么以下不调用重载operator== (const String &, const String &)

"cobble" == "stone"
Run Code Online (Sandbox Code Playgroud)

sbi*_*sbi 13

因为在C++中,字符串文字是类型const char[](也称为以零结尾的字符串常量),不是std::string,更不用说String(无论是什么).
有一个内置的operator==比较两个char*通过比较他们的地址.由于数组可以隐式转换为指向它们的第一个元素的指针(由于,你猜对了,C传承),这个运算符会介入,你比较的是这些文字在内存中的地址.

假设您的String类具有来自const char*(String::String(const char*))的隐式转换构造函数,您可以将其中一个转换为String.然后隐式转换另一个字符串:

String("cobble") == "stone"
Run Code Online (Sandbox Code Playgroud)

(除非提供operator==a String和a的超载const char*以提高效率.如果提供了它们,他们会介入.)


Vla*_*lad 6

因为隐式存在operator==(char*, char*)符合您对==更好的使用.

操作者==在代码"cobble" == "stone"可以以不同的方式进行匹配:operator==(char[], const String&),operator==(const String&, String),operator==(const String&, const std::string&)等等,条件是从所述参数类型(转换char*)到的参数的类型(String*等)存在.然而,通常的char*比较与输入最佳匹配.


Joe*_*oey 5

因为这些是C中的简单字符序列,但没有string类的实例.