这是将默认参数initial_value
初始化为TNumber
类型的编译时常量的唯一方法吗?如果没有,这样做的首选方法是什么?
template <typename TNumber>
class Widget {
public:
Widget(TNumber initial_value = static_cast<TNumber>(1))
: value_(initial_value) {};
private:
TNumber value_;
};
答案 0 :(得分:1)
首选方法是使用类型的预期构造函数。在C ++ 98中:
Widget(TNumber initial_value = TNumber(1));
在C ++ 11+中,你也可以使用聚合构造函数:
Widget(TNumber initial_value = TNumber{1});
当参数为const ref时,这也适用,如
Widget(const TNumber& initial_value = TNumber{1});
按照惯例,显式默认构造函数为数值返回0,因此以下两行对于标准数值类型(int,char,float等等)是等效的
Widget(const TNumber& initial_value = TNumber{0});
Widget(const TNumber& initial_value = TNumber{});
[编辑]对于复数(std :: complex&lt;&gt;)也是如此。如果您定义自己的“类数”类型,我建议您遵循相同的约定。它可以在某些时候真正节省你的一天。