Posted on 2006-09-25 21:27
每次想名字都头痛 阅读(223)
评论(0) 编辑 收藏 引用
explicit关键字的用处是防止显示转换,废话不说,看例子说话:
#include <cstdio>
class A
{
public:
A(){ printf("A()\n"); }
A(int i):m_i(i){ printf("A(int i)\n"); }
explicit A(const A &ref)
{
m_i = ref.m_i;
printf("A(const A &ref)\n");
}
A &operator=(const A &rhs)
{
printf("A &operator=(const A& rhs)\n");
m_i = rhs.m_i;
return *this;
}
private:
int m_i;
};
A func(A a)
{
return a; //A(const A &ref)
}
int main()
{
A a = 0; // A(int i) **
A b = a; // A(const A &ref)
A c; //
c = 0; // 首先A(int i), 然后 A &operator=(const A &rhs)
c = b; // A &operator=(const A &rhs)
func(1); // func(1) ---> A(int i) **
return 0;
}
由于用了explicit关键字修饰,凡是用到A(const A &ref)构造函数的地方都会编译出错。
**用explicit声明的A(const A &ref)应该对这个没有影响才对,但是gcc 3.4报错。