C++ 将指针作为泛型c++;样板
我试图将指针(char*)传递给我编写的泛型函数。但是我得到了一个错误“重载的foo在这个上下文中是不明确的”。为什么会发生这种情况C++ 将指针作为泛型c++;样板,c++,templates,pointers,C++,Templates,Pointers,我试图将指针(char*)传递给我编写的泛型函数。但是我得到了一个错误“重载的foo在这个上下文中是不明确的”。为什么会发生这种情况 template <class T> T foo(T a, T b) { return a+b; } int main() { char *c="Hello",*d="world"; foo<char*>(c,d); return 0; } 模板 T-foo(T-a,T-b) { 返回a+b; } int
template <class T>
T foo(T a, T b)
{
return a+b;
}
int main()
{
char *c="Hello",*d="world";
foo<char*>(c,d);
return 0;
}
模板
T-foo(T-a,T-b)
{
返回a+b;
}
int main()
{
char*c=“你好”、*d=“世界”;
foo(c,d);
返回0;
}
它没有理由添加两个指针,这会导致非感官指针。例如,假设第一个文本位于地址0x7fffff00
,第二个文本位于0x80000100
。然后,在32位机器上进行添加后,您将得到…0
。零空指针
也许您想改用字符串,比如:
#include <string>
template <class T>
T foo(T a, T b)
{
return a+b;
}
int main()
{
std::string c="Hello", d="world";
foo(c,d);
return 0;
}
#包括
样板
T-foo(T-a,T-b)
{
返回a+b;
}
int main()
{
std::string c=“你好”,d=“世界”;
foo(c,d);
返回0;
}
另外请注意:在许多情况下(如本例),编译器可以为您推断模板类型,因此没有理由像
foo(c,d)
那样显式编写它,我真的怀疑这是错误。请发一张MCVE。但是A)不能添加指针,B)char*=“string literal”代码>已弃用。使用const char*
。还要注意返回a+b带有char*
的code>可能不会执行您认为它可以执行的操作。结果将是非常无用的。除了不能添加指针之外,代码没有问题。您对foo
有其他定义吗?