代码之家  ›  专栏  ›  技术社区  ›  Newline

C++将const魔法数字放入命名空间或不

  •  1
  • Newline  · 技术社区  · 7 年前

    我总是用 #define 在cpp文件的开头某处定义幻数。我想把它改成 const #include cpp文件随处可见。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Geezer    7 年前

    基本上你选择这样的 #define “consts”是指预处理器本身是否需要使用它们。除此之外,你还有很多优点 constexpr #定义 是的 listed here .

    匿名命名空间 幻数 在同一个文件中,因为其中的名称永远无法从其他翻译单元访问,因为就编译器而言,未命名的命名空间具有唯一的标识符。这就是说,在这里没有真正的收益把 内部 匿名命名空间 const 常量表达式 任何形式的变量 名字空间作用域 inherently have internal linkage .

    至于 常量表达式 物体 ,要点是 常量表达式 表示编译期间已知的常量值, 1 这种差异对于编译时编程或其他应用程序的使用至关重要 constant expressions


    1 请注意 常数 完整的 整数型 )作为其声明的一部分 即使没有明确声明 常量表达式 :

    const int A = 50; // `A` is a constant expression
    
    int n = 50;
    const int B = n; // `B` is not a constant expression as it-
                     // is not being initialized with a constant expression
    
        2
  •  4
  •   Jarod42    7 年前

    这是个好主意吗?

    #define 有几个问题,例如:

    #define SIX 1 + 5
    #define NINE 8 + 1
    
    constexpr int the_answer = SIX * NINE; // 42 and not 54
    

    如果在文件范围内使用,是的,这是有意义的。

    推荐文章