【发布时间】:2017-02-20 12:02:45
【问题描述】:
当我写这样的代码时:
struct foo {
operator int() const { return 1; }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
它可以工作,但是当我编写这样的代码时:
struct foo {
operator string() const { return string("foo"); }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
编译器(clang++)说error: invalid operands to binary expression ('foo' and 'foo')
我想知道为什么,string 类型和int 类型都有比较运算符,但是当foo 有用户定义的int 转换时,它会隐式转换为int 进行比较,但是当@ 987654331@ 只有一个用户定义的string 转换,编译器不做隐式转换虽然(string)a<(string)b 工作得很好。
【问题讨论】:
-
我不知道导致这种情况的规则,但很可能与
int是内置类型有关 -
@NathanOliver imho 问题并不是真正的骗子,但答案也完美地解释了这个
-
@tobi303 是的,这就是我自己没有关闭它的原因。不确定它是否应该作为骗子关闭,但答案确实解释了问题。