enum hack

作者: 猩猩隊長 | 来源:发表于2018-12-23 11:55 被阅读0次
#include <iostream>
using namespace std;

class A{
public:
    enum enumHack{a = 5, b = 10};
};

class B {
public:
    enum enumHack { a = 5, b = 10 };
    enumHack eh;
};

int main()
{
    cout << "sizeof(Class A) = " << sizeof(A) << endl;
    cout << "sizeof(Class B) = " << sizeof(B) << endl;

    return 0;
}

运行结果:
sizeof(Class A) = 1
sizeof(Class B) = 4

说明枚举类型本身不会占用内存空间,而枚举的对象会占用内存空间

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

//对于支持类内初始化的C++编译器,这段代码可以编译通过。
class Game {
private:
    static const int GameTurn = 10;
    int scores[GameTurn];
};

//较老编译器可能不支持类内初始化,这样静态常量,须在类外初始化
class Game {
private:
    static const int GameTurn;
    int scores[GameTurn];
};

const int Game::GameTurn = 10;

//如果没有int scores[GameTurn],
//这段代码就可以在不支持类内初始化的编译器通过
//但int scores[GameTurn];用到GameTurn,而GameTurn的值不能确定。所以会报如下错误
enum_hack.cpp:5: error: array bound is not an integer constant

此时,我们仍不想用硬编码数字指定数组大小,可以使用:enum hack

使用enum hack的技巧,其思想就是把GameTurn定义为一个枚举常量

class Game {
private:
    enum {GameTurn = 10};
    int scores[GameTurn];
};

enum hack的行为更像#define而不是const,如果你不希望别人得到你的常量成员的指针或引用,你可以用enum hack替代之。

为什么不直接用#define呢?
首先,因为#define是字符串替换,所以不利于程序调试。
其次,#define的可视范围难以控制,比如你怎么让#define定义的常量只在一个类内可见呢?除非你用丑陋的#undef。

使用enum hack不会导致 “不必要的内存分配”。

enum hack是模板元编程的一项基本技术,大量的代码在使用它。

相关文章

  • enum hack

    运行结果:sizeof(Class A) = 1sizeof(Class B) = 4 说明枚举类型本身不会占用内...

  • enum hack test

    enum hack test output:sizeof(Y): 80sizeof(X): 1

  • Enum 类型转化

    enum & int enum -> int: int -> enum: enum & String enum -...

  • Hack Hack

    Tuesday, February 25, 2014 一转眼已经三个多月没有好好为HF写点什么了。月初从国内过完年...

  • 在css中区别ie浏览器和chrome浏览器

    /***** 样式 Hack ******/ /***** 选择器 Hack ******/

  • 32. OOP-使用枚举类

    from enum import Enum Month = Enum('Month', ('Jan', 'Feb'...

  • “蹭网”怎么说?

    【蹭网】 1.hack into one's WI-FI hack非法入侵;黑客;hack into 侵入(电脑)...

  • 12 CSS兼容

    什么是 CSS hack 简单的说,HACK就是只有特定浏览器才能识别这段hack代码。Hack也可以说是让前端最...

  • CSS hack 原理

    参考文章: CSS hack大全&详解(什么是CSS hack) 要点总结: css hack 原理是:依据不同浏...

  • 20-IE6浏览器兼容

    CSS Hack 什么是CSS Hack?针对IE的不同版本设置不同的CSS属性, 我们就称之为CSS Hack ...

网友评论

      本文标题:enum hack

      本文链接:https://www.haomeiwen.com/subject/bsogkqtx.html