2013-06-27 28 views
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在模板扣除中被忽略。由於objconst object&型的,我們有一個P&&f參數我會想到的是,模板參數解析爲object&以來& && = &功能f應該成爲

void f(object& p) { makeItTalk(std::forward<object&>(p)); } 

但這種功能甚至不允許被稱爲對於obj。所以我想知道如果我錯誤地說const被忽略?

+1

我不知道我的理解正是你問什麼,但據我所知,轉發常量性是性病的'預期的效果: :forward'。 –

回答