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