我可以在以下情况下调用foo(const T *&)吗?
#include <iostream>
template <typename T>
void foo(const T*&)
{
std::cout << "::foo(const T*&) \n";
}
template <typename T>
void foo(const T&)
{
std::cout << "::foo(const T&) \n";
}
答案 0 :(得分:4)
您感到困惑的是,const T*&
表示对指向const T
的指针的引用,而不是对指向T
的指针的const引用。
要调用该foo
版本,请使用
int main()
{
const int *iptr = 0;
foo(i);
return 0;
}
或者(可能按预期),将函数签名更改为T *const &
,即对指向T
的指针的const-reference。
答案 1 :(得分:0)
不,你不能使用那个代码,因为有一个隐式转换,你最终会调用foo(const T&amp;)版本。 如果要分离这两种行为,请使用explicit:
template <typename T>
void foo(const T*&)
{
std::cout << "::foo(const T*&) \n";
}
template <typename T>
void foo(explicit const T&)
{
std::cout << "::foo(const T&) \n";
}
int main()
{
int x;
int *y=&x;
foo(x);
foo(y);
return 0;
}
这样foo(x)将调用foo(const T&amp;),而foo(y)将调用foo(const T *&amp;)