关于带有复制构造函数的vs/g++

about vs/g++ with copy-constructor

本文关键字:vs g++ 构造函数 于带 复制      更新时间:2023-10-16

我正试图在Visual Studio(2008)和g++中编译代码
在vs2008中它是成功的,但在g++中它报告了错误
如果添加const
test(const test &source):a(source.a) {}
g++将编译成功
我知道test aa = 2;将创建一个临时对象并调用复制构造函数
临时对象无法绑定到非常量引用
那么,为什么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(尽管这种特殊情况不会得到任何警告),并在可能的情况下使用多个编译器检查您的编译。