<small id='T7Fa0'></small><noframes id='T7Fa0'>

  • <i id='T7Fa0'><tr id='T7Fa0'><dt id='T7Fa0'><q id='T7Fa0'><span id='T7Fa0'><b id='T7Fa0'><form id='T7Fa0'><ins id='T7Fa0'></ins><ul id='T7Fa0'></ul><sub id='T7Fa0'></sub></form><legend id='T7Fa0'></legend><bdo id='T7Fa0'><pre id='T7Fa0'><center id='T7Fa0'></center></pre></bdo></b><th id='T7Fa0'></th></span></q></dt></tr></i><div id='T7Fa0'><tfoot id='T7Fa0'></tfoot><dl id='T7Fa0'><fieldset id='T7Fa0'></fieldset></dl></div>
    <tfoot id='T7Fa0'></tfoot>
  • <legend id='T7Fa0'><style id='T7Fa0'><dir id='T7Fa0'><q id='T7Fa0'></q></dir></style></legend>

      <bdo id='T7Fa0'></bdo><ul id='T7Fa0'></ul>
      1. 为什么需要在类之外定义静态数据成员?

        时间:2023-12-03

          <tfoot id='HoJdE'></tfoot>
          1. <i id='HoJdE'><tr id='HoJdE'><dt id='HoJdE'><q id='HoJdE'><span id='HoJdE'><b id='HoJdE'><form id='HoJdE'><ins id='HoJdE'></ins><ul id='HoJdE'></ul><sub id='HoJdE'></sub></form><legend id='HoJdE'></legend><bdo id='HoJdE'><pre id='HoJdE'><center id='HoJdE'></center></pre></bdo></b><th id='HoJdE'></th></span></q></dt></tr></i><div id='HoJdE'><tfoot id='HoJdE'></tfoot><dl id='HoJdE'><fieldset id='HoJdE'></fieldset></dl></div>

            1. <small id='HoJdE'></small><noframes id='HoJdE'>

                <bdo id='HoJdE'></bdo><ul id='HoJdE'></ul>
                  <tbody id='HoJdE'></tbody>
                <legend id='HoJdE'><style id='HoJdE'><dir id='HoJdE'><q id='HoJdE'></q></dir></style></legend>

                  本文介绍了为什么需要在类之外定义静态数据成员?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  根据 静态数据成员在 IBM C++ 知识中心:

                  According to Static data members on the IBM C++ knowledge center:

                  类的成员列表中静态数据成员的声明不是定义.您必须在类声明之外的命名空间范围内定义静态成员.

                  The declaration of a static data member in the member list of a class is not a definition. You must define the static member outside of the class declaration, in namespace scope.

                  这是为什么?关于内存分配的原理图是什么?

                  Why is that? What's the schematic behind that regarding the memory allocation?

                  推荐答案

                  这是语言的一条规则,称为一个定义规则.在一个程序中,每个静态对象(如果使用的话)必须定义一次,而且只能定义一次.

                  It's a rule of the language, known as the One Definition Rule. Within a program, each static object (if it's used) must be defined once, and only once.

                  类定义通常在头文件中,包含在多个翻译单元中(即来自多个源文件).如果标题中的静态对象声明是一个定义,那么您最终会得到多个定义,每个包含标题的单元中都有一个定义,这会破坏规则.因此,它不是一个定义,您必须在其他地方提供一个定义.

                  Class definitions typically go in header files, included in multiple translation units (i.e. from multiple source files). If the static object's declaration in the header were a definition, then you'd end up with multiple definitions, one in each unit that includes the header, which would break the rule. So instead, it's not a definition, and you must provide exactly one definition somewhere else.

                  原则上,该语言可以对内联函数执行它所做的事情,允许将多个定义合并为一个.但事实并非如此,所以我们坚持这条规则.

                  In principle, the language could do what it does with inline functions, allowing multiple definitions to be consolidated into a single one. But it doesn't, so we're stuck with this rule.

                  这篇关于为什么需要在类之外定义静态数据成员?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:在 C++ 类中初始化静态变量? 下一篇:在类定义中定义静态常量整数成员

                  相关文章

                  <legend id='MMmA3'><style id='MMmA3'><dir id='MMmA3'><q id='MMmA3'></q></dir></style></legend>
                • <i id='MMmA3'><tr id='MMmA3'><dt id='MMmA3'><q id='MMmA3'><span id='MMmA3'><b id='MMmA3'><form id='MMmA3'><ins id='MMmA3'></ins><ul id='MMmA3'></ul><sub id='MMmA3'></sub></form><legend id='MMmA3'></legend><bdo id='MMmA3'><pre id='MMmA3'><center id='MMmA3'></center></pre></bdo></b><th id='MMmA3'></th></span></q></dt></tr></i><div id='MMmA3'><tfoot id='MMmA3'></tfoot><dl id='MMmA3'><fieldset id='MMmA3'></fieldset></dl></div>
                    <bdo id='MMmA3'></bdo><ul id='MMmA3'></ul>

                  1. <tfoot id='MMmA3'></tfoot>

                    1. <small id='MMmA3'></small><noframes id='MMmA3'>