c++11 指针空值、默认函数控制、

指针空值常量nullptr, 是一个编译时期的常量。不要对nullptr做取地址操作。

指针空值类型 nullptr_t.

所有定义为nullptr_t类型的数据都是等价的,行为也是完全一致。

nullptr_t类型数据可以隐式转换成任意一个指针类型。

nullptr_t类型不能转换为非指针类型,即使使用reinterpret_cast<nullptr_t>()的方式也是不可以的。

nullptr_t类型数据不适用于算术运算表达式。

nullptr_t类型数据可以用于关系运算表达式,但仅能与nullptr_t类型数据或者指针类型数据金子那个比较,当且仅当关系运算符为==、<=、>=等时返回true.

 

默认函数控制:

显示缺省函数:由于构造函数如果没有自己定义,会有一个默认的构造函数,这样的可以是POD.如果自己定义了带参的构造函数,要想用无参构造,必须自己定义,且这个无参函数与默认形式和使用上一致,但却破坏了POD.为了既有函数的自定义,又想不破坏POD,所以引入了 新机制,重用default关键字。在默认函数定义或者声明时加上“=default”,从而显示地指示编译器生成该函数的默认版本。

Struct() = default;

如果指定产生默认版本后,程序员不在也不应该实现一份同名的函数。用于类的定义中修饰成员函数,也可以在类定义之外修饰成员函数。以及一些其他函数。

显示删除函数:限制默认拷贝函数的生成,最简单的方法就是设置为私有的权限,不写实现类。但是友元类很可能会需要拷贝构造函数,而拷贝构造函数不实现的话,会导致编译失败。c++11 中在函数的定义或者和声明上加上“=delete”,它会只是编译器不生成函数的缺省版本。可以有效阻止用户错用这个函数,注意一旦缺省版本被删除,重载该函数也是非法的。

1.除了避免用户使用一些不应该使用的类的成员函数,还可以避免编译器做一些不必要的隐式数据类型转换(下面的类成员函数、全局函数、一些普通函数)。如下隐性参数转换:

c++11 指针空值、默认函数控制、

2.不能将explicit关键字与显示删除合用,会造成一些混乱。

3.需要对象在指定内存位置进行内存分配,并且不需要析构函数来完成一些对象级别的清理,可以通过显示删除析构函数来限制自定义类型在栈上或者静态的构造。

c++11 指针空值、默认函数控制、