Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为什么以下不会产生编译器错误?
template<typename T> const T testFunc() { return T(); } float* ptr = testFunc<float*>(); // ptr is not const - should be a compiler error!
在这个例子中, testFunc() 应该返回一个常量 float*,所以当我尝试将它分配给一个非常量 float* 时不应该出现编译器错误吗?
您的期望是错误的,返回的指针将是 const,而不是指向的对象。专业化相当于:
float * const testFunc<float*>();
而不是:
float const * testFunc<float*>();
在您的示例中,调用端的代码正在从 const 指针复制到非常量指针,这很好。