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

How should I interpret this struct in c++?

本文关键字:结构体 解释 c++      更新时间:2023-10-16
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_)部分做什么?

c++中classstruct的区别在于struct的默认值是public。除此之外,它们完全一样。

所以你有一个内部类KEY_VALUE,所有的成员和方法都是公共的,有2个构造函数:默认的,一个接收2个参数。它是而不是复制构造函数。k(k_), v(v_)为初始化列表

这是一个构造函数,而不是复制构造函数。复制构造函数为:KEY_VALUE(const KEY_VALUE&) .

复制构造函数定义在标准的§12.8中:非模板构造函数是指第一个实参为X&const X&volatile X&const volatile X&,其他所有实参(如果有)都有默认值的构造函数。

:之后的都称为initializer list

它是一个常规构造函数,接受对KEY类型和VALUE类型元素的引用。k(k_)和v(v_)根据KEY和VALUE类型中定义的构造函数,分别用k_和v_自动初始化KEY k和VALUE v。

KEY_VALUE(const KEY &k_,const VALUE &v_)不是复制构造函数-它是一个常规的旧构造函数。

:k(k_), v(v_)是一个初始化列表,用于初始化结构体的kv成员。

请记住,在c++中,结构体与类是一样的,只是对成员的默认访问是public而不是private,如果它继承自另一个类,默认继承也是public而不是private。

复制构造函数必须具有以下签名之一:

KEY_VALUE(const KEY_VALUE&);    
KEY_VALUE(KEY_VALUE&);

复制构造函数的编码如下:

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的构造函数

这不是一个复制构造函数,只是一个带两个参数的构造函数…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这样的好书,从头到尾读一遍……即使你很聪明,你也不可能通过实验来学习c++(实际上,你越聪明,学习c++就越困难:在相当多的地方,c++不是一种合乎逻辑的语言,你也不可能猜到委员会因为政治或历史原因而做出的决定)。