Rim*_*imo 5 c++ templates const return-value
来自Herb Sutter的GotW#6
对于非内置返回类型,返回值通常应为const....
注意:Lakos(第618页)反对返回const值,并指出它对于内置函数来说是多余的(例如,返回"const int"),他注意到这可能会干扰模板实例化.
虽然Sutter似乎不同意在使用Lakos按值返回非构建类型的对象时是返回const值还是非const值,但他通常同意返回内置类型的const值(例如const int) )不是一个好主意.
虽然我理解为什么这是无用的,因为返回值不能被修改,因为它是一个右值,我找不到一个如何干扰模板实例化的例子.
请举例说明如何使用返回类型的const限定符可能会干扰模板实例化.
这是一个涉及函数指针的简单示例:
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)"
}
Run Code Online (Sandbox Code Playgroud)
请注意,Visual C++ 2010 错误地接受这两者。Comeau 4.3.10 和 g++ 4.1.2 正确地不接受g(&f_const)调用。