关于带有复制构造函数的vs/g++
about vs/g++ with copy-constructor
我正试图在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(尽管这种特殊情况不会得到任何警告),并在可能的情况下使用多个编译器检查您的编译。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- VS 2017 使用交叉编译器构建 x64 项目