带参数的构造函数被隐式调用

class A
{
public:
	A()
	{
		printf("0");
	}
	A(int a)
	{
		printf("1");
	}
	A& operator=(const A& a)
	{
		printf("2");
		return*this;
	}
};
int test1()
{
	A al;
	al = 10;
	return 0;
}

上面的代码大家觉得会输出什么?
正确答案是:012
这里只需要解释一下,到底为什么有中间这个1,我们看主函数的第一行A类实例化了一个对象,这个对象现在调的是默认的构造函数,第二行是给这个对象赋值,但是因为此时的对象是无参构造出来的,不能直接赋值,所以就会去先调带参数的构造函数,然后才会使用=重载进行赋值,不这样的话就无法赋值,这个过程也是编译器帮我们的。

发布了149 篇原创文章 · 获赞 27 · 访问量 5054

猜你喜欢

转载自blog.csdn.net/qq_44783220/article/details/102992232