我有以下一段 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
被忽略是否错了?