5

在设计一个可以移动但不能复制的类时,很自然地将复制构造函数声明为私有。当只有可移动且可简单复制的对象作为实例成员时,允许编译器隐式生成移动构造函数是有意义的。

但是,当同时支持 VS11 和 G++4.7 时,我发现不兼容:

  • VS11 需要明确定义的移动构造函数
  • G++ 要求显式移动构造函数具有匹配的公共复制构造函数或 noexcept 关键字
  • VS11 不支持 noexcept 关键字。

正如你所看到的,这让我有点不知所措。我的课绝不能抄袭。我必须同时支持VS11 和 MinGW / GCC。我需要我的班级是可移动的。

我是否误解了什么,或者有没有办法解决这个小问题?如果生成了对复制构造函数的调用,我可以使编译失败吗?这个问题有更好的解决方案吗?

4

1 回答 1

4

如果将其添加到源文件

#ifdef _MSC_VER
#define noexcept
#endif

您将能够将其定义为noexcept在 GCC 上,但 VC++ 将忽略noexcept.

于 2012-10-19T13:02:19.127 回答