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

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

  • VS11需要明确定义的 move 构造函数
  • G++要求显式的move构造函数使匹配公共(public)拷贝构造函数或noexcept关键字
  • VS11不支持noexcept关键字。

  • 如您所见,这让我有点咸菜。不得复制我的类(class)。我必须同时支持VS11和MinGW/GCC。我需要我的类(class)可以上课。

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

    最佳答案

    如果将此添加到源文件

    #ifdef _MSC_VER
    #define noexcept
    #endif
    

    您将可以在GCC上将其定义为noexcept,但是VC++将忽略noexcept

    10-06 05:48
    查看更多