我该如何在c ++中解释这个结构?

时间:2011-07-26 20:58:15

标签: c++ data-structures

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_)部分做了什么?

6 个答案:

答案 0 :(得分:4)

C ++中classstruct之间的区别在于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_)是一个初始化列表,用于初始化结构的kv成员。

请记住,在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%正确,因为第二种形式kv首先由默认构造函数初始化,然后分配它们。 另请注意,将参数完全命名为成员也是常见的,这使得语法更加出色......

KEY_VALUE(const KEY &k,const VALUE &v) :k(k), v(v) {}

如果您不知道初始化列表语法,那么我假设您从未阅读任何体面的C ++书籍。请帮个忙,不要再用编译器来试验C ++ ...... C ++不能这样学习,必须加以研究。

像TCPPPL一样选择一个good book并从封面到封面阅读......即使你很聪明,你也无法通过实验学习C ++(实际上你越聪明,它就越难:在很多地方,C ++并不是一种逻辑语言,因为政治或历史原因,你无法猜出委员会的决定。