默认的复制构造函数和复制赋值赋值运算符给出了奇怪的错误

goj*_*oji 4 c++ constructor compiler-errors c++11

我已经默认了我的复制构造函数和复制赋值运算符,如下所示:

  Config(const Config& config) = default;
  Config& operator=(const Config& rhs) = default;
Run Code Online (Sandbox Code Playgroud)

然后通过友谊获得了对这些功能的访问权限.在创建配置对象的副本后,我收到以下警告并注意(?):

./cfg/config.hpp:129:3:警告:未使用的参数'config'[-Wunused-parameter] cfg/get.cpp:在函数'const cfg :: Config&cfg :: Get(bool)'中:cfg/get.cpp:34:30:注意:这里首先需要合成方法'cfg :: Config :: Config(const cfg :: Config&)'

看起来复制构造函数甚至没有被实例化.尽管如此,代码似乎运行.

gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)

jua*_*nza 8

只需省略参数:

Config(const Config&) = default;
Config& operator=(const Config&) = default;
Run Code Online (Sandbox Code Playgroud)

上述语句指示编译器生成所述类型的默认特殊成员函数,但未指定这些实现的详细信息.参数名称是多余的,无效.编译器可以自由发出合法代码的警告.

从§8.4.2开始:

......明确默认的函数应该

- 成为特别会员,

- 具有相同的声明函数类型(可能不同的ref限定符除外,在复制构造函数或复制赋值运算符的情况下,参数类型可以是"引用非const T",其中T是名称成员函数的类)就像它已被隐式声明一样......