作者Chikei ( )
看板C_and_CPP
標題Re: [問題] C++11 語法問題
時間Wed Mar 14 14:38:48 2012
std::function的template原理請洽Modern C++ Design Ch.5,有精美的討論
class foo{
public:
void operator()(int value);
}
void callback(int arg, std::function<void(int)> func){
func(arg);
}
foo obj;
callback(1, obj);
會有std::function move ctor出現是因為
callback(1, obj);
compiler會隱式轉換成
callback(1, std::function<void(int)>(obj));
而callback的第二個參數是pass by value,所以實際在callback內部的func的建構是
std::function<void(int)> func( std::function<void(int)>(obj) );
另外std::function有定義move ctor,所以func是用move ctor建構的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.92.133
推 QQ29:嗯我有猜到會隱換,但奇怪的是我f11就直接跑到move cstr 03/14 21:38
→ QQ29:沒看到他跑copy cstr很不解 03/14 21:39
→ QQ29:我傳一般function pointer他直接跑copy cstr,不懂他怎會走不 03/14 21:54
推 QQ29:同建構方式,f12進去stl直接看是不是不可讀啊…很複雜 03/14 21:56
→ QQ29:還是都該買解析的書才好懂…很挫折 03/14 21:57