2
請解釋一下,爲什麼在下面的代碼沒有錯誤不同的簽名:的std ::綁定和調用的函數綁定
void f()
{
}
void h()
{
std::bind(f)(42);
}
爲什麼編譯器不會抱怨STD冗餘參數::綁定,而綁定函數f?如果不應該,請解釋爲什麼這可能有用。
請解釋一下,爲什麼在下面的代碼沒有錯誤不同的簽名:的std ::綁定和調用的函數綁定
void f()
{
}
void h()
{
std::bind(f)(42);
}
爲什麼編譯器不會抱怨STD冗餘參數::綁定,而綁定函數f?如果不應該,請解釋爲什麼這可能有用。
此代碼是符合的。您傳遞給綁定結果的參數僅在需要時使用。
使用從標準的術語:u
是std::bind(f, t1, ..., tN)
結果。
約講:
當u(u1, u2, ..., uM)
被調用時,f
稱爲f(v1, ..., vN)
,其中vi
值由下面的算法確定:
//N is the N from `std::bind(f, t1, ..., tN)`
For each i in 1 to N:
if (ti is a reference wrapper) vi is the unwrapped version of t1
if (ti is a bind_expression) vi is the result of calling ti with u1, ..., uM
if (ti is a placeholder) vi is uj (where j is is_placeholder<decltype(ti)>::value)
otherwise vi is ti
您正在使用什麼編譯器?知道有人試圖回答這個問題可能很有用。 – 2012-03-23 23:32:24
不是嗎? g ++抱怨並且不會編譯... – ShinTakezou 2012-03-24 01:15:42