【问题标题】:Using constants instead of macros使用常量代替宏
【发布时间】:2013-07-11 13:51:06
【问题描述】:

如果宏是用另一个宏定义的,是否可以用常量替换宏:

#define START_OFFSET    0
#define ADDRESS_OFFSET  (START + START_SIZE)
#define SIZE_OFFSET     (ADDRESS_OFFSET + ADDRESS_SIZE)
and so on

我不完全确定,如果我使用全局常量并用常量初始化它们会发生什么。这可以被认为是安全的吗?

使用常量的原因是可以将它们包装到命名空间中。 顺便说一句,我使用这些宏仅用于处理存储在字节数组中的消息。

结构序列化是更好的选择吗?

【问题讨论】:

    标签: c++ initialization c-preprocessor constants


    【解决方案1】:

    我不完全确定,如果我使用全局常量并用常量初始化它们会发生什么。安全吗?

    是的,没关系。

    const int i = 4;
    const int j = 6;
    const int k = i + j; // legal
    

    结构序列化是更好的选择吗?

    这取决于你想要完成什么。现在,这个问题有点宽泛。 C++ 中没有金锤。

    【讨论】:

    • const 不是这个意思。你可以有const int x = rand();就好了。
    • 我不会称之为“更笼统”,而是“没有错”。 const 值不必是编译时常量。
    • @Magtheridon96 它是否与 C++03 兼容而不是特定于平台的?
    • @LuchianGrigore 我只需要全局编译时常量,否则我无法用宏实现它们
    • @Amomum 好吧,我说的是const 不会将变量限制为编译时常量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2017-07-08
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多