【发布时间】:2013-06-26 14:11:28
【问题描述】:
我目前正在阅读一本关于模板的书,它给出了以下示例:
#include <string>
// note: reference parameters
template <typename T>
inline T const& max (T const& a, T const& b)
{
return (a < b) ? (b) : (a);
}
int main()
{
char* a="apple";
char* p="peach";
::max(a,p); // OK, BUT
::max("apple","peach");// <<<< ERROR IN VISUAL STUDIO 2012, WHY?
}
我不明白为什么VS2012说:
错误 C2440: 'return' : 无法从 'const char *' 转换为 'const char (&)[6]'
请有人向我解释一下吗? 书上说应该没问题,不过是旧书,还在等新书。
【问题讨论】:
-
看起来
T const& a和const T& a是不同的东西...... -
@AlexFarber 不,他们不是。他在整个代码中使用
T const&。 -
如果不使用,为什么还要包含
string? -
即使你得到它的工作(下面的答案),它只会比较指针值,不字符串内容!
-
这是一个理论问题,而不是基于现实的问题。我试图了解使模板编程如此反直觉的微妙之处。包含字符串是因为样本较大,在某些时候模板 max 也与 2 std::string 一起使用,但我认为这与所提出的问题无关。
标签: c++ templates visual-studio-2012