我有一个使用通用引用的ctor人类类(class)

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?我的理解是“const”将取消模板ctor的资格,对吗?
Human the_human_I_care(one_I_do_not_care)  // line in question

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

最佳答案



否。您要传递 const 限定的Human作为参数。由于两个构造函数都将匹配得很好(即:如果模板将被实例化以采用const Human&),则非模板构造函数将比模板更可取(并且不会发生const Human&参数的模板实例化)。

关于c++ - 'const'是否取消通用引用的资格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48359328/

10-15 07:43