我有一个使用通用引用的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/