学习 c++11 之各种小技巧
作者:
| 更新日期:这里介绍很多 c++11 的小技能。
本文首发于公众号:天空的代码世界,微信号:tiankonguse
零、背景
之前提到,我们开始从 c98 切换到 c++11 了。
所以我打算分一个系列来介绍常见的 c++11 的语法。
今天要分享的第五个知识点是一系列小技巧,看一眼就可以学会吧。
一、空指针
在以前 c/c++
的语法中,我们空指针都是使用 NULL
来表示,甚至有些 heak 使用 0
来表示。
由于NULL
只是一个宏,本质上是整型。
这导致某些模板或者重载的时候定位到整型参数而不是指针参数,从而出错。
于是c++11
中引入了空指针nullptr
。
nullptr
是一个指针类型,可以隐式转化为任何指针类型。
使用如下:
char *pc = nullptr;
foo(pc);
//调用一个指针为参数的函数
foo(nullptr);
二、默认构造函数
c++有一个很烦人的语法,当我们重载构造函数时,默认构造函数如果没有实现,就不能通过无参数的形式创建这里类。
class A{
A(int a){};
};
A a; //error
而c++11
支持了一个语法,让默认构造函数不实现也能使用。
class A{
A(int a){}
A() = default;
};
A a;
看起来,相比写一个{}
,写= default;
好像更麻烦。
但是不要忘了,一个类还有赋值运算符
、移动运算符
、移动构造函数
等。
对于上面提到的三类,默认就不是一个{}
了,此时将会特别有用。
三、禁止函数
在c++
中,我们如果想禁用一个类函数的时候,可以只声明不定义。
单例经常这样做,但是这样看起来像是少写了什么。
现在c++11
明确给了一个语法:= delete
。
class A{
A(A) = delete;
operator= (const A&) = delete;
public:
A* ins(){
static A a;
return &a;
};
};
四、需要重载
在实现多态继承时,子类经常会无意间重载掉基类的某个虚函数,这就导致很隐藏的BUG。
现在,c++11
可以加override
关键字后,就可以要求编译器对重载的函数进行参数类型强检查。
override
明确的表示一个函数是对基类中的虚函数进行重载。
这时候,就编译器就可以检查函数签名是否一致了。
五、禁止重载
有时候,由于安全,某些类或函数不希望被继承或重载了。
之前是做不到的,现在可以通过final
关键字来做到。
class TaskManager {/*..*/} final;
class A{
pulic:
virtual void func() const;
};
class B: A{
pulic:
void func() const final; //OK
};
六、最后
好了,这里介绍了空指针、默认函数、禁止函数、声明继承、禁止继承重载五个c++11
的语法。
应该常用的就这些了吧, 你觉得c++11
还有什么不错的语法吗?
-EOF-
本文公众号:天空的代码世界
个人微信号:tiankonguse
公众号ID:tiankonguse-code
本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。