随手写写

知识,是需要积累的
posts - 1, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

explicit关键字

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报错。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理