我正在尝试在 Visual Studio (2008) 和 g++ 中编译代码。
在vs2008中成功,在g++中报错。
如果添加 const
,
测试(const test &source):a(source.a){}
g++会编译成功。
我知道 test aa = 2;
会创建一个临时对象并调用复制构造函数。
临时对象不能绑定(bind)到非常量引用
那么,为什么vs2008可以编译成功呢?
class test{
public:
test():a(1) {}
test(int num):a(num) {}
test(test &source):a(source.a) {}
private:
int a;
};
int main(){
test aa = 2;
return 0;
}
最佳答案
不幸的是,VS 有一个允许它的非标准扩展。
有一个编译器标志可以禁用扩展,但最后我检查了它也使得无法使用标准库。最好的办法是将警告级别保持在 4(尽管这种特殊情况不会收到警告),并尽可能使用多个编译器检查您的编译。
关于c++ - 关于带有复制构造函数的 vs/g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9858551/