关于类类型对象的赋值问题

我定义了一个类A,如下:
class A
{
private:
int i1;
public:
int i2;
A(int i){};
A(int i1,int i2){};
}

然后,我在main函数中定义了一个A类类型的变量:
int main(void)
{
A a(1,2);
//问题来了
a=3;
a=(4,5);
a=(6,7,8);
return 0;
}

a的三条赋值语句都可以通过,
程序可以编译和运行通过,这是为什么啊?

 a=(4,5);
a=(6,7,8);
其实调用的都是a(int)这个构造函数。
这里涉及一个概念,叫做逗号表达式:
int i = 1,2,3;
此时i=3。C语言规定,你可以将多个表达式用逗号写在一起,整个表达式的值就是最后一个表达式的值。
所以(6,7,8)这个表达式起始就是8。
a=(6,7,8);
其实就是a=8
a=8其实就是a=A(8);