C++11 比较好的语法(三)
来源:互联网 发布:最尴尬的事情 知乎 编辑:程序博客网 时间:2024/05/22 16:51
转自:http://www.cnblogs.com/TianFang/p/3306231.html
随着Vsisual Studio 2013 RC版的放出,之前承诺的对C++ 11语法支持已经全部完成,本文是C++ 11中我喜欢的语法系列的最后一部分(一),(二)。
非静态成员直接初始化
在C++ 03的时候,非静态成员变量只能在对象的构造函数里初始化,例如:
struct A
{
int m;
A() : m (7) { }
};
当对象成员比较多的时候,这个对象成员的初始化是非常难看的。尤其是在构造函数较多的情况下,由于C++ 03不支持委托构造函数,这一大堆的成员需要在每一个构造函数中初始化一遍,是十分冗繁而容易出错的。
在C++ 11中,非静态成员也能以静态成员那种方式直接初始化的,这样就直观的多了:
struct A
{
int m = 7;
};
启用和禁止默认函数
在C++中,编译器会生成一些默认函数,例如对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如
- A(void); // 缺省的无参数构造函数
- A(const A &a); // 缺省的拷贝构造函数
- ~A(void); // 缺省的析构函数
- A & operate =(const A &a); // 缺省的赋值函数
在C++ 11中,支持通过 default 和 delete 两个关键字来管理这默认函数。delete意为禁止默认函数,default则使用默认函数。
例如,当我们自定义你空构造函数时,编译器就不会给我们生成缺省无参构造函数,此时则可以通过= default来让编译器产生默认构造函数。
struct A
{
A() = default;
A(int n) {}
};
至于= delete,一个比较典型的用途是可以定义一个不可拷贝的对象,如:
struct NoCopy
{
NoCopy & operator =(const NoCopy &) = delete;
NoCopy(const NoCopy &) = delete;
};
另外,= delete也可以用于禁止那些隐式转换而执行的函数,例如:
struct A
{
void foo(int k){}
void foo(double k) = delete;
};
这样,类似a.foo(3.2)之类的调用就会有编译错误(话说,应该像C#那样天生报编译错误才更为合理)。
类型别名
虽然自C语言时代就支持通过typedef来为类型起别名,但typedef对函数指针起别名显得比较难看,并且不支持模板。因此,在C++ 11种新增了using为对象起别名的语法:
// typedef std::ios_base::fmtflags flags;
using flags = std::ios_base::fmtflags;
// typedef void (*func)(int, int);
using func = void(*) (int, int);
template<class T> using ptr = T*;
//'ptr<T>' 等价于 T 的指针
ptr<int> x;
- C++11 比较好的语法(三)
- C++11 比较好的语法(一)
- C++11 比较好的语法(二)
- C的三字母(Trigraph)语法。
- React Navigation 自认比较好的navigator组件(三)
- c语言语法(三)
- 一个比较好用的C函数
- C语言中比较好的方法
- JAVA、C、C++基本语法的比较
- C 语言之三 声明的语法
- 【objectivet-c】语法(三)@property
- Objective-C 语法三(属性值)
- c/c++写的比较好的读写配置文件
- c 文件操作函数介绍(终于找到比较好的总结了)
- 一个比较好的全排列算法(C语言)
- 【CSDN网络资源】比较好的C/C++读书笔记
- 谁可以给个比较好的 C语言教程
- [C#]比较好的端口名称获取方法
- Handler(2)
- Mac OS X下如何使用OpenGL
- 使用ASP.NET模板生成HTML静态页面
- Java基础----equals
- 并查集
- C++11 比较好的语法(三)
- android实现横竖屏不间断播放文件
- MFC TRACE宏和Format函数
- Handler(3)
- Basic Concept
- NSAssert
- python try except else finally
- Handler(4)
- Lime, OpenFL + Haxe Cross Platform Development