我想要一个带有默认参数static_cast的构造函数,例如:

generate_word_spot(func_double_double_t& cost_f = static_cast<func_double_double_t&>(func_const_t(1))) :
      cost_f_(cost_f)
      {};


哪里

class func_const_t : public func_double_double_t
{
   ...
   virtual double operator()(double x){ ... };
}


func_double_double_t是许多与此类似的功能对象的基类。

GCC对上述构造函数说“无效的static_cast”。有没有办法实现这种行为?

最佳答案

您确定您的情况下需要非常量引用吗?如果可以使用const引用,则只需执行

generate_word_spot(const func_double_double_t& cost_f = func_const_t(1)) :
  cost_f_(cost_f)
  {}


无需强制转换。 (定义后的;也不是。)

否则,对于非常量引用绑定临时对象是毫无疑问的。您需要声明一个独立的非临时对象以用作默认参数

func_const_t def_const(1);
...
class generate_word_spot {
  ...
  generate_word_spot(func_double_double_t& cost_f = def_const) :
    cost_f_(cost_f)
    {}
};


使它成为类的静态成员是有意义的

class generate_word_spot {
  ...
  static func_const_t def_const;
  ...
  generate_word_spot(func_double_double_t& cost_f = def_const) :
    cost_f_(cost_f)
    {}
};

func_const_t generate_word_spot::def_const(1);

关于c++ - 默认参数值为static_cast,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11596269/

10-13 06:21