2010-05-28 58 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)调用。

相关问题