考虑以下类,其中包含std :: string类型的转换函数:
class SomeType { public: SomeType(char *value) { _str = value; } operator std::string() { return std::string(_str); } private: char *_str; };
以下代码段无法使用错误进行编译:no运算符“==”匹配这些操作数
int main(int argc,char* argv[]) { SomeType a("test"); if (a == std::string("test")) // ERROR on this line { int debug = 1; } return 0; }
解决方法
问题是std :: string实际上是一个模板,因此我想它的比较运算符也是一个模板.在这种情况下,我记得的标准规定,对于必需的参数,不会发生隐式转换,这意味着您必须将SomeType转换为自己的字符串以便调用它.
如有效C的第46项所述:
[…],because implicit type conversions are never considered during template argument deduction. Never. Such conversions are used during function calls,yes,but before you can call a function,you have to know which functions exist. […]
你可以找到更多信息here.