我有以下一段 c++11 代码:
#include <iostream>
struct object {
void talk(const char* text) const { std::cout << "talk " << text << std::endl; }
};
void makeItTalk(object& obj) { obj.talk("non-const"); }
void makeItTalk(const object& obj) { obj.talk("const"); }
template<typename P> void f(P&& p) {
makeItTalk(std::forward<P>(p));
}
int main() {
const object obj;
f(obj);
return 0;
}
跑步时,我talk const知道它应该是什么,但我想知道它是如何工作的。从我目前阅读的内容来看const,模板推导中忽略了 -qualifier。由于obj是类型const object&,并且我们有一个P&&as 参数,f我希望模板参数解析为object&并且因为& && = &函数f应该成为
void f(object& p) { makeItTalk(std::forward<object&>(p)); }
但是这个函数甚至不允许被调用obj。所以我想知道我说的const被忽略是否错了?