不是我卖关子,而是这里面细节太多,我怕没讲清到时候被人骂。
若你不介意,我就随便说说自定义类型(内建类型太简单了)
对于 type a = val; 而言
首先要将val转化为type,这要看构造函数了,而且是看可以隐式构造的构造函数。从这一点上来看则 type a = val; 未必等同于 type a = type(val);
接着是那个"="(这可不是赋值操作),它对应的拷贝构造函数,因此如果拷贝构造是非public的,它就会编译失败。
我上面没有拷贝构造函数的内容,只说其是否可见,那是因为C++规定这里需要优化,也就是只是控制由拷贝构造函数决定,但做什么却和拷贝构造函数无关。
听得更糊涂了吧?所以我一开始不想细讲^_^。我写段代码给你吧

程序代码:
#include <iostream>
using namespace std;
struct foo
{
foo( int val ) : val_(val)
{
cout << "foo(int)" << endl;
}
explicit foo( float f ) : val_(int(f))
{
cout << "foo(float)" << endl;
}
//private:
foo( const foo& obj ) : val_(obj.val_)
{
cout << "foo(foo)" << endl;
}
foo& operator=( const foo& obj )
{
cout << "=" << endl;
return *this;
}
private:
int val_;
};
int main(void)
{
foo a = 0;
cout << "----------------" << endl;
foo b = 0.0f;
cout << "----------------" << endl;
foo c = foo(0.0f);
cout << "----------------" << endl;
foo d = foo(0);
cout << "----------------" << endl;
return 0;
}
体会一下,为什么是这个输出结果
然后将拷贝构造函数设为private,再编译看看,想想为什么是这样