当设计一个可以 move 但不能复制的类时,很自然地将复制构造函数声明为私有(private)。当只有可 move 且平凡可复制的对象作为实例成员时,允许编译器隐式生成move构造函数是有意义的。
但是,当同时支持VS11和G++ 4.7时,我发现不兼容:
如您所见,这让我有点咸菜。不得复制我的类(class)。我必须同时支持VS11和MinGW/GCC。我需要我的类(class)可以上课。
我误会了什么,还是有办法解决这个小问题?如果生成了对复制构造函数的调用,我可以使编译失败吗?对这个问题有更好的解决方案吗?
最佳答案
如果将此添加到源文件
#ifdef _MSC_VER
#define noexcept
#endif
您将可以在GCC上将其定义为
noexcept
,但是VC++将忽略noexcept
。