【问题标题】:Definition fo object representation and operator sizeof对象表示和运算符 sizeof 的定义
【发布时间】:2014-10-07 04:31:18
【问题描述】:

对象表示概念的定义在3.9/4中给出:

[基本类型]

类型 T 的对象的对象表示是 N 的序列 类型 T 的对象占用的 unsigned char 对象,其中 N 等于 sizeof(T).

但是sizeof操作符的定义如下:

[expr.sizeof]

sizeof 运算符产生 object 中的字节数 表示它的操作数。

特别是:

当应用于一个类时,结果是一个类中的字节数 该类的对象,包括放置所需的任何填充 数组中该类型的对象

我想通过例子来考虑这个定义:

struct A {
    int a;  //sizeof(a) is implementation defined
    long b; //sizeof(b) is implementation defined
    char c; //sizeof(c) is 1 by definition 
    // Padding, problbly equals to 3 butes
}

sizeof(A) 是如何通过实现计算的?我们只计算sizeof(a) + sizeof(b) + sizeof(c) + padding 的总和。

但是required for placingobjects of that type in an array的条件是什么?

【问题讨论】:

  • 数组必须是连续的。对象需要正确对齐。
  • @T.C.所有类型的对象表示是否都期望 窄字符类型 由于 sizeof 而定义的实现是?
  • @T.C.关于我在问题中定义的结构。这意味着实现添加的填充也是未定义的,对吧?那是添加到将结构对象存储到数组中的能力的填充可能足够大。我试着确定,但是 clang 和 gcc 都给出了相同的 sizeof。

标签: c++ class sizeof


【解决方案1】:

你简单地计算结构的大小:

long size = sizeof(struct A);  

如果你想要一个struct A 的数组,

struct A arr[/* Size of array */];

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多