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

静态常量(非整数)成员初始化语法背后的基本原理?

  •  3
  • sje397  · 技术社区  · 14 年前

    我知道如何初始化一个不是整数的静态成员,但我想知道,这种语法背后的原理是什么?我想把这个值放到类中,就像一个整数成员la:

    class A {
      static const int i = 3;
    };
    

    我意识到,如果我改变了值,这可能意味着更多的重建,因为这是标题中的一个变化-但在某些情况下,这是非常不可能的-就像改变标题中的#定义一样糟糕。

    对于编译器来说,这似乎并不难理解。有没有技术上的原因,为什么它的工作方式呢?或者这只是编译器强制执行将实现与定义分离的良好实践的一个例子?

    2 回复  |  直到 14 年前
        1
  •  6
  •   James Curran    14 年前

    因为这就是课堂 宣言 . 你还没有任何目标。

    你真的需要 定义 某个地方的价值——某个特定的地方。

    既然是这样 static 它实际上占据了某个地方的空间。但是,既然包含该声明的.H文件可以包含在许多源文件中,那么哪个文件定义了它所使用的实际空间?让编译器自动定义每个对象文件中的空间,并让链接器对其进行排序,将违反“ One Definition Rule

        2
  •  1
  •   Gabriel Schreiber    14 年前

    这可能会帮助您:

    class A {
        enum { i = 3 }; // use an enum to set a constant value in the class declaration
        void f() { int k = int(i); }
    }