我刚开始学习C++,并从书籍中学习,因此我的推理可能会很迂腐或者狭隘。
就模板函数而言,我了解到当参数通过引用传递时,只允许从非const的引用/指针转换为const的引用/指针。
这意味着我相信:
template <typename T> int compare(T&, T&);
当调用compare(ci1, ci1)时应该失败,其中ci1为常量int,因为不允许将Const转换为非Const以用于引用参数。
然而,在我的编译器(Visual C++ 10)中它可以工作。有人能解释一下我错在哪里吗?
template <typename T> int compare(T&, T&);
template <typename T> int compare(T &v1, T &v2)
{
// as before
cout << "compare(T, T)" << endl;
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}
const int ci1 = 10;
const int ci2 = 20;
int i1 = 10;
int i2 = 20;
compare(ci1, ci1);
compare(i1, i1);