20200402 - c++ default构造函数 自定义类做hashMapkey

本文介绍了C++11中default构造函数的使用场景,特别是在编写了有参构造函数后如何确保无参构造函数的存在。同时,讨论了将自定义类(如枚举类)作为HashMap键时,需要自定义hashCode函数以避免冲突,并提供了template<>的使用示例来定义特定类型的hashCode函数。
摘要由CSDN通过智能技术生成

1、

C++ 11(应该是11具体记不清了,总之是新特性)加入了构造函数default的支持。

但是这个关键字在什么时候用呢?

答案是在你写了有参构造函数但是又不需要写无参构造函数,可以使用 Constructor() = default;

原因是如果你没有定义任何构造函数、拷贝构造函数、赋值构造函数、移动(std::move)构造函数的时候编译器都会默认生成对应的无参版本,但是一旦你定义了对应的构造函数例如 定义了普通有参构造函数:

Class Test
{
    Test(int i) {};
}

这时候编译器不会生成任何版本的普通构造函数,也就是说没有Test(){}的默认生成了,此时如果你又需要使用无参版本,那么就会报错,因为无法使用无参来初始化Test, 例如 把Test作为作为Key放到HashMap中就会报错,因为这时候这时候不保证一定有参数肯定需要一个无参构造函数。但是我们逻辑上又不需要定义,所以这种你需要用 但是逻辑上没有意义的函数 以前就要在头文件中定义,然后生成上面格式的空函数体现在就可以写成:

Class Test
{
    Test() = default;
    Test(int i) 
    {
        // do something
    };
}

这种格式了。但是如果你根本不需要定义任何形式的构造函数,当然也就没有必要写这个了。

2、自定义类(如enum class 枚举类)作为hashMap的Key的时候要注意什么。

其实很简单,当然要自定义hashCode函数了。所谓自定义类就是一个新类(不同于系统自定义类型int bool float等)没有现成的hashCo

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值