代码之家  ›  专栏  ›  技术社区  ›  Prashant Dubey

空类和空函数的大小?

c c++
  •  -4
  • Prashant Dubey  · 技术社区  · 15 年前

    以下代码中的解决方案是什么

    Class A{}
    void func(){}
    
    printf("%d,%d",sizeof(A),sizeof(func));
    
    3 回复  |  直到 11 年前
        1
  •  6
  •   Satish    15 年前

    一个空类的大小是非零的(很可能是1),因此该类的两个对象位于不同的地址。

    http://www2.research.att.com/~bs/bs_faq2.html#sizeof-empty 解释得更好

     class A{};
     void func(){}
    
     std::cout<<sizeof(A)<<std::endl<<sizeof(&func));// prints 1 and 4 on my 32 bit system
    
        2
  •  3
  •   Johannes Schaub - litb    15 年前

    你正在接受一个无法完成的函数的大小。你需要在名字前面加一个字母 & 获取指向该函数的指针的大小。你还需要把 sizeof int printf 期待 d 说明符

    printf("%d,%d", (int)sizeof(A), (int)sizeof(&func));
    

    至于具体的价值观——不知道它们超过了什么,大于或等于什么 1 . 这取决于编译器。

        3
  •  0
  •   Daniel Trebbien    15 年前

    sizeof(func) 你可能是说 sizeof(&func) ,它是以字节为单位的函数指针的大小。

    至于一个 A 目标是,标准只规定:

    脚注94对其进行了限定:

    基类子对象没有这样的约束。

    脚注的原因是允许编译器优化,称为 empty member optimization ,在模板库中通常用于访问类类型的例程(例如,分配器类类型的分配器例程),而不需要该类类型的成员对象。