2010-05-28 34 views
5

從香草薩特的GotW #6什麼時候const返回類型會干擾模板實例化?

回傳值通常應爲對非內置的返回類型常量。 ...

注:洛科什(第618)認爲不要返回常數值, 並指出它是多餘的內置命令反正 (例如,返回「const int的」),其中他指出可以 干擾模板實例化。

雖然薩特似乎不同意就是否返回一個常量的值或者用洛科什值返回非內建類型的對象,當非const值,他一般同意返回一個內置的常量的值類型(例如const int)不是一個好主意。

雖然我明白爲什麼這是無用的,因爲返回值不能被修改,因爲它是一個右值,我找不到一個如何可能會干擾模板實例化的例子。

請給我一個例子,說明如何讓返回類型的const限定符可能會干擾模板實例化。

回答

3

這裏有一個簡單的例子,涉及函數指針:

const int f_const(int) { return 42; } 
int f(int) { return 42; } 

template <typename T> 
void g(T(*)(T)) 
{ 
    return; 
} 

int main() 
{ 
    g(&f_const); // doesn't work: function has type "const int (*)(int)" 
    g(&f);  // works: function has type "int (*)(int)" 
} 

請注意Visual C++ 2010不正確,可同時接收。 Comeau 4.3.10和g ++ 4.1.2正確不接受g(&f_const)調用。

相關問題