是' const'取消普遍参考资格?

时间:2018-01-20 17:53:51

标签: c++ c++11 templates

我有一个使用通用引用的ctor人类课程

class Human {
 public:
  template<typename T>
  explicit Human(T&& rhs) {
    // do some initialization work
  }

  Human(const Human& rhs);  // the default ctor I don't care about
}

现在,如果我有一个const Human对象

const Human one_I_do_not_care; // then play with that
Human the_human_I_care(one_I_do_not_care)  // now create another one

最后一行是使用模板ctor还是默认的ctor?我的理解是&#34; const&#34;将取消模板ctor的资格,我是否正确?

Human the_human_I_care(one_I_do_not_care)  // line in question

通过const取消模板ctor的资格,我的意思是添加const然后它与模板ctor不匹配,不是它仍然匹配两个,但编译器选择一个。

1 个答案:

答案 0 :(得分:8)

  

最后一行是使用模板ctor还是默认的ctor?我的理解是const会取消模板ctor的资格,我是否正确?

没有。您正在传递 const - 限定Human作为参数。由于两个构造函数都同样匹配(即:如果模板将被实例化为const Human&),那么非模板构造函数优先于模板(并且不会发生const Human&参数的模板实例化。)