我正在尝试在Visual Studio(2008)和g ++中编译代码
在vs2008中它很成功,但在g ++中它报告错误
如果添加const
,
test(const test &source):a(source.a) {}
g ++将编译成功。
我知道test aa = 2;
将创建一个临时对象并调用copy-constructor
临时对象无法绑定到非const引用
那么,为什么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;
}
答案 0 :(得分:3)
不幸的是,VS有一个允许它的非标准扩展名。
有一个编译器标志来禁用扩展,但最后我检查它也使得无法使用标准库。您最好的选择是将警告级别保持在4(尽管这种特殊情况不会得到警告),并在可能的情况下检查您的编译与多个编译器。