overload vs default parameters in c++ standard

拜拜、爱过 提交于 2019-12-04 18:52:56

问题


I was reading another question, and it got me thinking. Often the standard specifies functions which have default parameters in their descriptions. Does the standard allow writing these as overloads instead?

For example, the standard says that std::basic_string::copy has the following declaration:

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

Could a conforming implementation of the standard library implement this instead as two functions like this?

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

In this example, the second version could skip the if(pos > size()) { throw out_of_range(); } test that is necessary in the first one. A micro-optimization, but still you see the point of the example.


回答1:


Could a conforming implementation of the standard library implement this instead as two functions like this?

Yes. The C++ Standard (C++03 17.4.4.4/2-3) says:

An implementation can declare additional non-virtual member function signatures within a [Standard Library] class:

-- by adding arguments with default values to a member function signature; the same latitude does not extend to the implementation of virtual or global or non-member functions, however.

-- by replacing a member function signature with default values by two or more member function signatures with equivalent behavior;

-- by adding a member function signature for a member function name.

A call to a member function signature described in the C + + Standard library behaves the same as if the implementation declares no additional member function signatures



来源:https://stackoverflow.com/questions/5031856/overload-vs-default-parameters-in-c-standard

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!