0

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

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

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

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

4

1 回答 1

4

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

float * const testFunc<float*>();

而不是:

float const * testFunc<float*>();

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

于 2012-08-29T02:19:19.220 回答