关于使用copy-constructor的vs / g ++

时间:2012-03-25 07:24:32

标签: c++ visual-studio-2008 g++ copy-constructor

我正在尝试在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;
}

1 个答案:

答案 0 :(得分:3)

不幸的是,VS有一个允许它的非标准扩展名。

有一个编译器标志来禁用扩展,但最后我检查它也使得无法使用标准库。您最好的选择是将警告级别保持在4(尽管这种特殊情况不会得到警告),并在可能的情况下检查您的编译与多个编译器。