小编Mac*_*ehl的帖子

名称查找不依赖于VC++ 2008 Express中的模板参数的名称.这是一个错误吗?

在尝试使用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此编译单元中没有前向声明.

c++ templates

5
推荐指数
1
解决办法
162
查看次数

标签 统计

c++ ×1

templates ×1