相关疑难解决方法(0)

在解析分配给默认参数值的重载函数时,会考虑哪些函数集?

考虑下面的函数bar,其参数具有从重载调用初始化的默认值foo:

#include <iostream>

int foo(int x)
{
  std::cout << "foo(int)" << std::endl;
  return 0;
}

template<typename T>
void bar(T a, int x = foo(T(0))) {}

double foo(double x)
{
  std::cout << "foo(double)" << std::endl;
  return 0;
}

int main()
{
  bar<int>(1);
  bar<double>(1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望这个程序输出

foo(int)
foo(double)
Run Code Online (Sandbox Code Playgroud)

对应于foobar实例化时可见的两个重载.

相反,当编译时g++-4.6,输出是

$ g++-4.6 -std=c++0x test.cpp; ./a.out 
foo(int)
foo(int)
Run Code Online (Sandbox Code Playgroud)

在实现与正常重载分辨率不同的默认参数值时是否考虑了过载集?这种情况是在ISO C++标准中描述的吗?

c++ overloading

13
推荐指数
2
解决办法
241
查看次数

标签 统计

c++ ×1

overloading ×1