zoukankan      html  css  js  c++  java
  • C++: Understanding Aggregate, POD, (with Trivial Class and Standard Layout )

    Strongly recommended:

        http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special/4178176#4178176

    先贴一个关于Aggregate的定义(from C++03  standard ):

    An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3)

    Aggregate有什么用? 之所以能够用brace-initializer {} 来对变量进行初始化,就是由于它是Aggregate的(当然如果你的类有 std::initializer_list<> ,那么你也可以用 {} 来初始化)。具体见上文链接。

    POD的定义(同样来自C++03 Standard):

    A POD-struct is an aggregate class that has no non-static data members of type non-POD-struct, non-POD-union (or array of such types) or reference, and has no user-defined copy assignment operator and no user-defined destructor. Similarly, a POD-union is an aggregate union that has no non-static data members of type non-POD-struct, non-POD-union (or array of such types) or reference, and has no user-defined copy assignment operator and no user-defined destructor. A POD class is a class that is either a POD-struct or a POD-union.

    POD有什么用? 之所以能够用 memcpy() , memset() 等直接操作内存的函数来处理对象(比如将一个POD所在的那块内存完整地拷贝到另外一个地方,然后再拷贝回来,C++标准保证其中内容不会发生变化),就是由于它是POD。

    POD一定是Aggregate,POD是Aggregate的子集

    在最新的C++11标准中这些定义都有一些轻微的变化,不过变化不大。

    关于Trivial Class 和 Standard Layout 这些也可以再上面的链接中找到答案。

    :)

  • 相关阅读:
    redis学习(二)-高级特性
    redis学习(一)-基础知识
    设计模式类型
    装饰者设计模式
    udp代理
    docker: unrecognized service
    centos6.x 编译安装zabbix_proxy 2.2.5
    写了一个shell,删除15天以上日志
    tempo 删除团队失败
    github批量删除organization下的private repo
  • 原文地址:https://www.cnblogs.com/walkerlala/p/5375432.html
Copyright © 2011-2022 走看看