看板 C_and_CPP 關於我們 聯絡資訊
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