【问题标题】:How to initialize a data member of unknown type to a default如何将未知类型的数据成员初始化为默认值
【发布时间】:2016-02-09 04:51:17
【问题描述】:

所以我有课

template<typename edge_val_type>
class Graph {
       struct edge {
         int index_;
         edge_val_type v_;
         edge(int index, edge_val_type v) : index_(index), v_(v) {}
}

如何将v_ 初始化为某个默认值?因为此时程序不知道edge_val_type 是什么。

【问题讨论】:

  • 回复的编辑在发布答案后更改了问题。

标签: c++ templates constructor initialization


【解决方案1】:

像这样:

edge()
    : index_( 0 ), v_{}
{}

【讨论】:

  • 与v_{} 一样,使用index_{} 以避免混淆。 :D
  • 这似乎不起作用。当我调用 edge(0) 时,编译器会抱怨“没有可行的构造函数”。
  • 如果你想要一个带参数的构造函数,那么你必须定义一个。
  • edge-val-type 有默认的 c-tor 吗?实际上是这个类,int 还是别的什么?
【解决方案2】:

听起来你在要求构造函数的默认参数。你可以写:

edge(int index, edge_val_type v = {}) : index_(index), v_(v) {}

这将允许使用 edge e(1); 和 e = edge(1); 和 e = 1;,因为这不是 explicit 构造函数。

【讨论】:

  • 程序编译得很好,但是当我运行它时它给出了一个seg_fault。以前,当我使用double v = 0 而不是edge_val_type v = {} 时,它运行良好。你能想到什么原因吗?
【解决方案3】:

如果v_ 是一个类并且有default c-tor,为什么不从c-tor initialize list 中省略它?

在这种情况下,v_ 将是 default constructed。

【讨论】:

  • −1 “int 默认构造为 0”,没有。
  • 该标准不需要任何此类初始化。您观察到的是任意的、编译器和选项相关的。
  • 你是对的。 gcc 似乎初始化为 0。已删除。
猜你喜欢
  • 2019-09-10
  • 1970-01-01
  • 2016-03-27
  • 2016-04-15
  • 2015-01-12
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 2013-10-14
相关资源
最近更新 更多