1
型扣我有下面這段C++ 11碼:在模板函數和const quailifier
#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&&
爲f
參數我會想到的是,模板參數解析爲object&
以來& && = &
功能f
應該成爲
void f(object& p) { makeItTalk(std::forward<object&>(p)); }
但這種功能甚至不允許被稱爲對於obj
。所以我想知道如果我錯誤地說const
被忽略?
我不知道我的理解正是你問什麼,但據我所知,轉發常量性是性病的'預期的效果: :forward'。 –