模板函数返回const模板类型

时间:2012-08-29 02:16:50

标签: c++ templates pointers const constants

为什么以下不会产生编译错误?

template<typename T>
const T testFunc()
{
    return T();
}

float* ptr = testFunc<float*>(); // ptr is not const - should be a compiler error!

在这个例子中,testFunc()应该返回一个常量float *,所以当我尝试将它分配给非const float *时,不应该有编译错误吗?

1 个答案:

答案 0 :(得分:4)

你的期望是错误的,返回的指针将是const,而不是指向的对象。专业化相当于:

float * const testFunc<float*>();

而不是:

float const * testFunc<float*>();

在您的示例中,调用端的代码是指针复制到非const指针,这很好。