g ++ 3.4.6中的C ++构造函数/复制构造函数问题

时间:2011-02-03 09:21:44

标签: c++ g++

以下是代码段:

class test {

        public:
                test(){
                        cout<<"I am in default constructor ";
                }
                static void func(const  test &obj){
                        cout<<"I am in function ";
                }
        protected:
                test( const test &o){
                        cout<<"I am  in copy constructor ";
                }
};

int main()
{
        test::func(test());
}

以上代码在编译时使用g ++ 3.4.6(在Red Hat Linux上)出现以下错误:

  

在函数`int main()'中:

     

错误:`test :: test(const test&amp;)'受保护

     

错误:在此上下文中

但是,如果使用g ++ 3.3.2或g ++ 4.4.3或任何其他g ++版本(在Red Hat Linux上)进行编译,则会成功编译并提供以下输出:

  

我在默认构造函数中我在函数

在上面的代码中,我已经通过引用将临时对象(由默认构造函数创建)传递给函数func。那么为什么编译器3.4.6正在调用复制构造函数?

1 个答案:

答案 0 :(得分:0)

最有可能的原因是旧的g ++版本(我相信它代表其他编译器)并不完全符合c ++,并且比当前版本有更多错误。正如你所说,这适用于更高版本,因此它很可能是固定的。

修改

顺便问一下,您是否尝试过更改编译器设置?不同的优化级别可能会有不同的错误。