
Roshan wrote:
The C++ Standard library does not use default arguments. Instead it provides an additional overload. Anybody know why ?
For e.g.
It provides the following two overloads for accumulate :
template<class Itr, class T> accumulate(Itr first, Itr last, T init);
template<class Itr, class T, class BinOp> accumulate(Itr first, Itr last, T init, BinOp op);
instead of:
template<class Itr, class T, class BinOp> accumulate(Itr first, Itr last, T init, BinOp op = std::plus<T>() );
N3092 (C++0x FDC), 17.6.4.5 Member functions [member.functions] says :
An implementation may declare additional non-virtual member function signatures within a class: — by adding arguments with default values to a member function signature;190 [ Note: An implementation may not add arguments with default values to virtual, global, or non-member functions. -end note ] — by replacing a member function signature with default values by two or more member function signatures with equivalent behavior; and...
So an implementation of the Standard Library is allowed to use default arguments, instead of having additional overloads, as long as they behave the same.
I am wondering if there is any reason to avoid default arguments in general purpose libraries ?
The additional overloads /might/ perform slightly better in some cases, because they would avoid constructing default values, and passing them as argument. HTH, Niels -- Niels Dekker http://www.xs4all.nl/~nd/dekkerware Scientific programmer at LKEB, Leiden University Medical Center