【发布时间】:2013-04-23 12:17:47
【问题描述】:
看这个例子:
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} 行很好。大括号转换为Foo 以匹配隐式operator= 方法的参数类型。如果 operator= 是用户定义的,它仍然有效。
if (a=={1,2}}) 行错误,如图所示。
为什么表达式{1,2} 不能转换为Foo 以匹配用户定义的operator== 方法?
【问题讨论】:
-
这是g++-4.7。
-
我在您的代码中没有看到任何明确的
operator==。您的意思是“用户定义”吗? -
它被称为初始化列表而不是表达式 litteral 的事实可能表明它不是故意支持的(尽管在你问之前我没有考虑过)。跨度>
-
你可以改写
if (a == Foo{1, 2})。 -
我已经开始讨论,希望在未来的版本中可以取消这个限制。免费添加评论。 groups.google.com/a/isocpp.org/d/msg/std-proposals/nXjimf0amus/…