【问题标题】:C++ constructor/copy constructor issues in g++ 3.4.6g++ 3.4.6 中的 C++ 构造函数/复制构造函数问题
【发布时间】:2011-02-03 09:21:44
【问题描述】:

这是一个代码sn-p:

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&)' 受保护

错误:在此上下文中

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

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

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

【问题讨论】:

标签: c++ g++


【解决方案1】:

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

编辑

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

【讨论】:

  • stackoverflow.com/questions/4733448/… - 这不是错误。它是合规的。这种行为在 GCC 中有所改变,因为它有点傻,语言本身在 C++0x 中修复了它。
  • @Tomalak 感谢您的参考。这种行为确实很愚蠢,我不知道 5.2.3
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 2020-05-14
  • 2016-12-19
  • 2013-09-15
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多