zoukankan      html  css  js  c++  java
  • enum hack

    关于占用内存的大小,enum类型本身是不占内存的,编译器直接替换。但是enum类型的变量肯定是占内存的.

    • class A{
    •     public:
    •     //enum类型本身不占内存
    •     enumEnumTest{
    •     a =1,b =5};
    • };
    • class B{
    •     public:
    •     private:
    •     //enum理想的变量会占用内存
    •     enumEnumTest enumSample1;
    • };
    • int main()
    • {
    •   
    •    cout <<"sizeof(Class A) = "<<sizeof(A)<< endl;
    •     cout <<"sizeof(Class B) = "<<sizeof(B)<< endl;
    •     return0;
    • }

     

    结果A占1个字节,B占4个字节.

    enum结构体定义的的确是常量,但并不是在预编译的时候进行替换,而是在编译时,从enum定义的常量存储区取定义的常量值。因此,同样的常量定义,如果用#define,代码中多处用到该常量的话,编译出来的会比用enum定义使用的常量存储区大。

    ,#define 定义的常量,在预编译的时候做了替换,而enum定义的常量,并不是在预编译的时候进行替换,只是在编译的时候,根据标识去常量区获取对应的值。

     

    只是举个enum常用的例子。

    1. class AA{
    2. enumDefType{
    3. a =10,
    4. b =5
    5. };
    6. int arr[a];
    7. };
    8. class BB{
    9. enumDefType2{
    10. a =100,
    11. b2 =50
    12. };
    13. int arr[a];
    14. };
     

    这也是在类中静态声明一个数组的好方法称为enum hack。

  • 相关阅读:
    POJ 3140 Contestants Division (树dp)
    POJ 3107 Godfather (树重心)
    POJ 1655 Balancing Act (树的重心)
    HDU 3534 Tree (经典树形dp)
    HDU 1561 The more, The Better (树形dp)
    HDU 1011 Starship Troopers (树dp)
    Light oj 1085
    Light oj 1013
    Light oj 1134
    FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/3554330.html
Copyright © 2011-2022 走看看