看这个例子:
struct Foo
{
int a;
int b;
bool operator == (const Foo & x)
{
return a == x.a && b == x.b;
}
};
int main ()
{
Foo a;
a = {1, 2};
if (a == {1, 2}) // error: expected primary-expression before ‘{’ token
{
}
}
线路a={1,2}
很好。大括号被转换为 aFoo
以匹配隐式operator=
方法的参数类型。如果operator=
是用户定义的,它仍然有效。
如图所示的线路if (a=={1,2}})
错误。
为什么表达式{1,2}
不转换为 aFoo
以匹配用户定义的operator==
方法?