在尝试使用C++模板时,我设法生成了这个简单的代码,其输出与我根据我对C++规则的理解所预期的不同.
void bar(double d)
{
std::cout << "bar(double) function called" << std::endl;
}
template <typename T> void foo(T t)
{
bar(3);
}
void bar(int i)
{
std::cout << "bar(int) function called" << std::endl;
}
int main()
{
foo(3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我在VC++ 2008 Express中编译此代码时,函数bar(int)被调用.这将是行为,我期望bar(3);在模板体中依赖于模板参数.但事实并非如此.我在这里找到的规则说:"C++标准规定,在解析模板函数或类时,所有不依赖于模板参数的名称都绑定到它们当前的定义".我错了,bar解析模板函数时的"现在定义"是什么foo定义
void bar(double d);?如果我错了,为什么不是这样.bar此编译单元中没有前向声明.