C++ 如何将未知类型的数据成员初始化为默认值

C++ 如何将未知类型的数据成员初始化为默认值,c++,templates,constructor,initialization,C++,Templates,Constructor,Initialization,所以我有一节课 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) {} } 模板 类图{ 结构边{ int索引; 边缘v型; 边(int index,edge_val_typ

所以我有一节课

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) {}
}
模板
类图{
结构边{
int索引;
边缘v型;
边(int index,edge_val_type v):索引(index),v_v(v){}
}
如何将
v\u
初始化为某个默认值?因为此时程序不知道什么是
edge\u val\u类型。

如下:

edge()
    : index_( 0 ), v_{}
{}
像这样:

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

听起来像是在向构造函数请求默认参数。您可以编写:

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

这将允许使用
edge e(1);
e=edge(1);
e=1;
,因为这不是一个
显式的
构造函数。

听起来像是在向构造函数请求一个默认参数。您可以编写:

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

这将允许使用
edge e(1);
e=edge(1);
,以及
e=1;
,因为这不是一个
显式的
构造函数。

如果
v_
是一个类并且具有
默认的c-tor
,为什么不从
c-tor初始化列表中省略它呢


在这种情况下,
v_
将被
默认构造

如果
v_
是一个类并且具有
默认c-tor
,为什么不从
c-tor初始化列表中省略它呢


在这种情况下,
v_{/code>将被
默认构造

就像
v_{}
一样,使用
index{}
以避免混淆。:d这似乎不起作用。当我调用
edge(0)
时,编译器抱怨“没有可行的构造函数”。如果你想要一个带参数的构造函数,那么你必须定义一个。edge val类型有默认的c-tor吗?实际上这个类是int还是别的?比如
v{}
,使用
index{}
,以避免混淆。:d这似乎不起作用。当我调用
edge(0)
时,编译器抱怨“没有可行的构造函数”。如果您想要一个带参数的构造函数,则必须定义一个。edge val type是否具有默认的c-tor?实际上是此类、int或其他类型?在发布答案后更改问题的还原编辑。在发布答案后更改问题的还原编辑。−1“int是默认用0构造的”,否。标准不需要任何此类初始化。您观察到的是任意的、编译器和选项相关的。您是正确的。
gcc
似乎初始化为0。已删除。−1“int是用0构造的默认值”,不需要。该标准不需要任何此类初始化。您观察到的是任意的、编译器和选项相关的。您是正确的。
gcc
似乎初始化为0。已删除。该程序编译良好,但在我运行它时出现了seg_错误。以前,当我使用
双v=0
而不是
edge_val_type v={}
,它运行得很好。你能想出什么原因吗?程序编译得很好,但我运行它时它出现了一个seg_错误。以前,当我使用
双v=0
而不是
edge_val_type v={}
时,它运行得很好。你能想出什么原因吗?