class new_hashtable {
public:
/* This is the datatype stored in the hashtable slots. */
struct KEY_VALUE {
KEY k;
VALUE v;
KEY_VALUE(const KEY &k_,const VALUE &v_) :k(k_), v(v_) {}
KEY_VALUE() {}
};
}
在上面的代码中,KEY_VALUE(const....) :k(k_), v(v_){}
是一个复制构造函数吗? k(k_), v(v_)
部分做了什么?
答案 0 :(得分:4)
C ++中class
和struct
之间的区别在于struct
的默认值是公开的。除此之外,它们完全一样。
所以你有一个内部类KEY_VALUE
,其中所有成员和方法都是公共的,有2个构造函数:默认值,以及一个接收2个参数的构造函数。它是不复制构造函数。 k(k_), v(v_)
是initialization list。
答案 1 :(得分:2)
它是构造函数,而不是复制构造函数。副本构造函数为:KEY_VALUE(const KEY_VALUE&)
。
复制构造函数在标准的§12.8
中定义:非模板构造函数是构造函数,其中第一个参数是X&
,const X&
,volatile X&
或{{ 1}}和所有其他参数都有默认值。
const volatile X&
之后的所有内容都称为:
。
答案 2 :(得分:1)
它是一个常规构造函数,它引用KEY类型和VALUE类型的元素。 k(k_)和v(v_)分别按照KEY和VALUE类型中定义的构造函数,用k_和v_自动初始化KEY k和VALUE v。
答案 3 :(得分:0)
KEY_VALUE(const KEY &k_,const VALUE &v_)
不是一个复制的构造函数 - 它是一个常规的旧构造函数。
:k(k_), v(v_)
是一个初始化列表,用于初始化结构的k
和v
成员。
请记住,在C ++中,结构与类是一样的,除了对成员的默认访问是公共的而不是私有的,如果它从另一个类继承,则默认是公共继承而不是私有。
复制构造函数必须具有以下签名之一:
KEY_VALUE(const KEY_VALUE&);
KEY_VALUE(KEY_VALUE&);
答案 4 :(得分:0)
复制构造函数的编码如下:
KEY_VALUE( const KEY_VALUE& iK )
: k( iK.k )
, v( ik.v )
{}
该行
KEY_VALUE( const KEY& k_, const VALUE& v_ )
: k( k_ )
, v( v_ )
{}
只是一个在KEY和VALUE上参数化的构造函数。
答案 5 :(得分:0)
这不是一个复制构造函数,只是一个带有两个参数的构造函数......在C ++语法中:
KEY_VALUE(const KEY &k_,const VALUE &v_) :k(k_), v(v_) {}
或多或少等同于
KEY_VALUE(const KEY &k_, const VALUE &v_)
{
k = k_;
v = v_;
}
请注意,这不是100%正确,因为第二种形式k
和v
首先由默认构造函数初始化,然后分配它们。
另请注意,将参数完全命名为成员也是常见的,这使得语法更加出色......
KEY_VALUE(const KEY &k,const VALUE &v) :k(k), v(v) {}
如果您不知道初始化列表语法,那么我假设您从未阅读任何体面的C ++书籍。请帮个忙,不要再用编译器来试验C ++ ...... C ++不能这样学习,必须加以研究。
像TCPPPL一样选择一个good book并从封面到封面阅读......即使你很聪明,你也无法通过实验学习C ++(实际上你越聪明,它就越难:在很多地方,C ++并不是一种逻辑语言,因为政治或历史原因,你无法猜出委员会的决定。