如何在c++中解释这个结构体?
How should I interpret this struct in c++?
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++中class
和struct
的区别在于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_)
是一个初始化列表,用于初始化结构体的k
和v
成员。
请记住,在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%正确的,因为在第二种形式中,k
和v
首先由默认构造函数初始化,然后再分配。还要注意,将形参完全命名为成员也是很常见的,这会使语法更加花哨…
KEY_VALUE(const KEY &k,const VALUE &v) :k(k), v(v) {}
如果你不知道初始化列表语法,那么我认为你从来没有读过任何像样的c++书籍。请帮自己一个忙,不要再用编译器来试验c++了……c++不能用这种方法学习,必须学习。
选一本像TCPPPL这样的好书,从头到尾读一遍……即使你很聪明,你也不可能通过实验来学习c++(实际上,你越聪明,学习c++就越困难:在相当多的地方,c++不是一种合乎逻辑的语言,你也不可能猜到委员会因为政治或历史原因而做出的决定)。
- MSVC将仅移动结构参数解释为指针
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 如何获取结构体成员的地址
- 创建结构体向量,表达式:向量下标超出范围
- boost::任何带有结构体和无符号整数
- 如何在构造函数中初始化结构体的动态数组?
- 只写结构体的某些字段
- 你能解释一下指针和递归结构体吗?
- 如何在c++中解释这个结构体?