聚合体Aggregate
来源:互联网 发布:interbase数据库说明书 编辑:程序博客网 时间:2024/05/17 04:24
一、什么是聚合体呢?
英文表述为Aggregate, 从MSDN上找到的定义如下:
An aggregate type is an array, class, or structure type which:
Has no constructors
Has no nonpublic members
Has no base classes
Has no virtual functions
http://msdn.microsoft.com/en-us/library/sdwe79a4.aspx
另外,MSDN 告诉我们一个聚合体是可以通过{}这种方式来初始化的。
而我们知道c语言里struct是能用{}这种方式来初始化的,而且是完全符合Aggregate的上述定义的。所以,我们可以得出一个结论,c语言里struct的行为就是一个Aggregate的行为。所以,c++中只要class和struct也象c语言里struct一样,满足成为一个Aggregate的条件,即能通过{}这种方式来初始化(不调用构造函数)。
二、举例说明
1>例1struct Node
{
int a;
int b
};
struct Node node = {1,2}; ----编译correct,因为此例子就是一个Aggregate
VS2010里,通过“Ctrl + Alt + D”即可进入到c++代码和汇编的混合代码,查看汇编代码可知确实是没有调用struct的构造函数。
class Test
{
public:
Test() {};
private:
int a;
};
struct Node
{
int a;
int b;
Test c;
};
struct Node node = {1,2}; -----编译correct, 因为此例子struct Node是一个Aggregate。
3>例3
class Test
{
public:
int a;
};
struct Node
{
int a;
int b;
Test c;
};
struct Node node = {1,2}; -----编译correct, struct Node是一个Aggregate
4>例4
class Test
{
private:
int a;
};
Test m = {1} -------编译incorrect,因为int a不是public的,故class Test不是一个Aggregate
5>例5
class Test
{
Test() { }
public:
int a;
};
Test m = {1} -------编译incorrect,因为Test有自定义的构造函数,故class Test不是一个Aggregate
0 0
- 聚合体Aggregate
- Enumerable.Aggregate
- SORT AGGREGATE
- Scala aggregate
- mongo aggregate
- Aggregate方法
- mongo-aggregate
- 聚合 aggregate
- C++中的Aggregate
- C++中的Aggregate
- Aggregate Function Data Type
- LINQ之Aggregate
- LINQ中的Aggregate语法
- Nobel Prizes: Aggregate functions
- The Aggregate Magic Algorithms
- aggregate 函数使用示例
- Linq :Aggregate;SequenceEqual;join
- Hadoop Streaming 实战: aggregate
- 【企业开源系列】全球著名互联网企业背后的开源力量
- eclipse 环境搭建记录(包括CDT,PDT)
- 数据结构与算法面试题80道
- Cordova插件开发
- 反射性能优化
- 聚合体Aggregate
- HDU--杭电--4502--吉哥系列故事——临时工计划--背包--01背包
- Android如何调用摄像头
- Boost.Python实现C++与Python互调用
- 数据结构的学习方法
- 【企业开源系列】Google背后的开源力量
- Netty In Action中文版 - 第三章:Netty核心概念
- IE下java配置404、500页面
- 图片文字识别的两种简便方法