gpt4 book ai didi

c++ - 在没有初始化的情况下在 header 中声明符号常量?

转载 作者:行者123 更新时间:2023-11-30 04:05:01 29 4
gpt4 key购买 nike

通常的做法是在头文件中定义符号常量:

#define T_FOO 1
#define T_BAR 2

丑陋的。

static const int T_FOO = 1;
static const int T_BAR = 2;

更好,因为不是预处理器。

enum
{
T_FOO = 1,
T_BAR
} T_Type;

更好的是,因为 T_Type 包含目的信息,并且编译器可以进行额外的检查(例如,如果所有情况都在 switch 中处理)。

可能还有六种变体。不过有一件事……他们都向客户披露了数值。我想隐藏这些值,只是因为它们无关紧要。但是我能想到的一种方法...

typedef int T_Type;

// defined elsewhere
extern const T_Type T_FOO;
extern const T_Type T_BAR;

...不工作例如case 语句(因为 T_FOOT_BAR 是常量,但不是编译时常量表达式)。

有没有办法拥有这一切?

  • 在标题中声明符号常量而不公开数值,
  • 但可用作常量表达式,例如在 switch 语句中?

我的理解水平说“不”,但我知道我并非无所不知。 ;-)

最佳答案

要在 as switch 语句标签中使用,编译器必须更早地在该翻译单元的源代码中看到这些值。

所以本质上,,您不能在不公开符号常量的情况下声明它们的值,并且不能将它们用作开关中的标签。

但是,您可以使用 if-else 结构。

关于c++ - 在没有初始化的情况下在 header 中声明符号常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489861/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com