为什么以下不调用重载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*以提高效率.如果提供了它们,他们会介入.)
因为隐式存在operator==(char*, char*)符合您对==更好的使用.
操作者==在代码"cobble" == "stone"可以以不同的方式进行匹配:operator==(char[], const String&),operator==(const String&, String),operator==(const String&, const std::string&)等等,条件是从所述参数类型(转换char*)到的参数的类型(String*等)存在.然而,通常的char*比较与输入最佳匹配.
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |