C++11 语法 struct : bar{} foo{}
2016-04-20 16:30
369 查看
本文翻译自stackoverflow:http://stackoverflow.com/questions/7067793/what-is-this-crazy-c11-syntax-struct-bar-foo
首先先来看看普通的抽象用户定义类型(UDT):
struct foo { virtual void f() = 0; };
再来看看我们定义的一个UDT示例:
联合上述的两个例子,然后声明一个匿名的UDT:
我们不需要任何有关匿名UDT的证明,我们可以不需要纯虚函数,可以得到如下的声明:
如果现在有一个UDT是从一些基类继承而来的:
最后,C++11中定义了新的初始化方法:
最后得到:
这就是一个从bar继承而来的无名结构,实例化foo是一个空初始化。
首先先来看看普通的抽象用户定义类型(UDT):
struct foo { virtual void f() = 0; };
foo obj; // 不能定义一个 'obj' 变量为foo的抽象类型
再来看看我们定义的一个UDT示例:
struct foo { foo(){ cout << "i"; } }; struct foo { foo() { cout << "!"; } } instance;
联合上述的两个例子,然后声明一个匿名的UDT:
struct { virtual void foo() = 0; } instance; //错误:不能声明一个'instance'的变量是抽象匿名结构<anonymous struct>类型
我们不需要任何有关匿名UDT的证明,我们可以不需要纯虚函数,可以得到如下的声明:
struct {} foo;
如果现在有一个UDT是从一些基类继承而来的:
struct bar{}; //base UDT struct : bar{} foo; //匿名派生UDT和实例
最后,C++11中定义了新的初始化方法:
int x{0}; int x{};
最后得到:
struct : bar{} foo{}
这就是一个从bar继承而来的无名结构,实例化foo是一个空初始化。
相关文章推荐
- C语言程序运行期间所作工作的概览
- [c++]traits
- C++位运算符及逻辑运算符
- 第4周 C语言及程序设计提高例程-18 一维数组应用二三例
- C++中vector类 ----持续更新中
- c/c++程序的文件结构
- C++指针详解
- 简明的C++函数指针学习教程
- OpenCV2.4.10之samples_cpp_tutorial-code_learn-----ImgTrans(图片边框与图片卷积)
- 巩固C语言(十三)----文件重定向 & 静态库和动态库的使用 &sscanf函数
- 广义表的C++简单实现
- C语言07指针高级
- PL/0 词法分析器设计 c语言
- C语言中的函数指针学习笔记
- C++11多线程
- C语言06指针进阶
- KMeans的C++及Python实现
- 第4周 C语言及程序设计提高例程-15 小小型应用系统开发指导(三)
- C语言05指针基础
- 详解C语言编程中的函数指针以及函数回调