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

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

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

相关文章:

c++ - 关于 C++ 中的移位运算符技巧?

c++ - std::cin 不会在输入错误时抛出异常

c++ - 仅当底层类型具有这些构造函数时才实现模板类型构造函数

c++ - 在旧的 C++ 标准中,我可以使用什么来代替 std::string::pop_back?

c# - C# 中的附件集合附件集合

c++ - 在 C++ 中向下思考

c++ - strerror_s、strcpy_s、localtime_s、sprintf_s 未在此范围内声明?

null - __null 在 g++ 中定义在哪里?

c++ - OpenCV+cvBlobsLib : blobs come out "stretched" on the x-axis

visual-studio-2008 - 选择哪一个? DXCore、Resharper 还是 VSX?