我有一个使用通用引用的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不匹配,不是它仍然匹配两个,但编译器选择一个。
答案 0 :(得分:8)
最后一行是使用模板ctor还是默认的ctor?我的理解是
const
会取消模板ctor的资格,我是否正确?
没有。您正在传递 const
- 限定Human
作为参数。由于两个构造函数都同样匹配(即:如果模板将被实例化为const Human&
),那么非模板构造函数优先于模板(并且不会发生const Human&
参数的模板实例化。)