这个是整理的所得,原文连接http://topic.csdn.net/t/20050301/13/3815012.htmlhtml
能够参考http://blog.csdn.net/fornormandy/archive/2004/08/19/79512.aspx。ide
- class A{
- int a;
- public:
- explicit A(int i):a(i){}
- };
- int main()
- {
- A a(1),b(2);
- a = b;
- a = 2; //错误,不能隐式转换。若是没有explicit这个关键字,则是能够的。
- return 0;
- }
最惊奇的是能够直接这样去声明一个对象,A a=2,看来对构造函数的执行时机和隐式转化理解的不深。函数
关于构造函数,拷贝构造函数,赋值操做符使用和隐式转化的联系和区别:spa
- A b(1);
- A a = b; //这样才调用拷贝构造函数
- A c = 2; //调用带int参数(有且仅有一个非缺省参数)的构造函数。
- 若是是这样:
- A a(1),b(2),c(3);
- a = b; //调用operator=()
- a = 2; //调用operator=(),由于缺省的operator=的参数类型是(const &),
- //因此这里有一个隐式转换,构造出一个临时对象A(2),就从2转换到了A(2)。
- //operator=函数里处理的就是临时 对象A(2)。
- //若是重载为A &operator=(int),a=b不会出错.
- //由于缺省的A & operator=(const A&)会起做用
C++仍是博大精深,感受好些不会,不过仍是碰一点,学一点来得印象深入。.net