以下是代码段:
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正在调用复制构造函数?
答案 0 :(得分:0)
最有可能的原因是旧的g ++版本(我相信它代表其他编译器)并不完全符合c ++,并且比当前版本有更多错误。正如你所说,这适用于更高版本,因此它很可能是固定的。
修改强>
顺便问一下,您是否尝试过更改编译器设置?不同的优化级别可能会有不同的错误。