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

Eva*_*ran 11 c++ overloading std

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

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

size_type copy(Ch* p, size_type n, size_type pos = 0) const;
Run Code Online (Sandbox Code Playgroud)

标准库的符合实现可以实现这个,而不是像这样的两个函数吗?

size_type copy(Ch* p, size_type n, size_type pos) const;
size_type copy(Ch* p, size_type n) const;
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*lis 16

标准库的符合实现可以实现这个,而不是像这样的两个函数吗?

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

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

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

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

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

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