c ++标准中的重载vs默认参数

时间:2011-02-17 16:44:58

标签: c++ overloading std

我正在读另一个问题,这让我思考。通常,标准指定在其描述中具有默认参数的函数。标准是否允许将这些作为重载写入?

例如,标准规定std::basic_string::copy具有以下声明:

size_type copy(Ch* p, size_type n, size_type pos = 0) const;

标准库的符合实现是否可以实现这个作为这样的两个函数?

size_type copy(Ch* p, size_type n, size_type pos) const;
size_type copy(Ch* p, size_type n) const;

在此示例中,第二个版本可以跳过第一个版本中必需的if(pos > size()) { throw out_of_range(); }测试。微观优化,但你仍然看到了例子的重点。

1 个答案:

答案 0 :(得分:16)

  

标准库的符合实现是否可以实现这个作为这样的两个函数?

是。 C ++标准(C ++ 03 17.4.4.4/2-3)说:

  

实现可以在[标准库]类中声明其他非虚拟成员函数签名:

     

- 通过向成员函数签名添加带默认值的参数;但是,相同的纬度不会扩展到虚拟或全局或非成员函数的实现。

     

- 将成员函数签名替换为具有等效行为的两个或多个成员函数签名的默认值;

     

- 通过为成员函数名称添加成员函数签名。

     

对C ++标准库中描述的成员函数签名的调用与实现声明没有其他成员函数签名的行为相同