Вы можете просто создать два различных конструктора:
T(const T&)
T(const T&,double)
Однако то, что у вас есть допускается как конструктор копирования.
На стороне примечания я обнаружил, что обычно использовать не стандартные параметры в C++, а лучше использовать перегрузки, где те, у которых меньше параметров, вызывают те, у которых больше параметров, используя значения по умолчанию (конечно, это невозможно с конструкторами в ISO C++ 2003, но делегирование конструкторов разрешено в ISO C++ 201x). Причина этого в том, что значения по умолчанию дают вашим функциям разные фактические сигнатуры, чем их кажущееся поведение, что делает его несколько сложным/болезненным при выборе указателей на функции. Предоставляя перегрузки, можно указывать указатели на функции каждого возможного типа вызова, не требуя какого-либо механизма привязки, чтобы заставить его работать.
См. [Этот PR] (http://llvm.org/bugs/show_bug.cgi?id=5989), который я когда-то отправлял, чтобы играть в некоторые игры, чтобы играть с этим. –
http://punchlet.wordpress.com/2009/12/03/letter-the-third/ – 2010-05-07 17:55:33