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={}
时,它运行得很好。你能想出什么原因吗?