久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

<legend id='8a26v'><style id='8a26v'><dir id='8a26v'><q id='8a26v'></q></dir></style></legend>
  • <i id='8a26v'><tr id='8a26v'><dt id='8a26v'><q id='8a26v'><span id='8a26v'><b id='8a26v'><form id='8a26v'><ins id='8a26v'></ins><ul id='8a26v'></ul><sub id='8a26v'></sub></form><legend id='8a26v'></legend><bdo id='8a26v'><pre id='8a26v'><center id='8a26v'></center></pre></bdo></b><th id='8a26v'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='8a26v'><tfoot id='8a26v'></tfoot><dl id='8a26v'><fieldset id='8a26v'></fieldset></dl></div>
        <bdo id='8a26v'></bdo><ul id='8a26v'></ul>
      1. <small id='8a26v'></small><noframes id='8a26v'>

      2. <tfoot id='8a26v'></tfoot>

        專用模板類的靜態成員初始化

        static member initialization for specialized template class(專用模板類的靜態成員初始化)
      3. <i id='HY9Pe'><tr id='HY9Pe'><dt id='HY9Pe'><q id='HY9Pe'><span id='HY9Pe'><b id='HY9Pe'><form id='HY9Pe'><ins id='HY9Pe'></ins><ul id='HY9Pe'></ul><sub id='HY9Pe'></sub></form><legend id='HY9Pe'></legend><bdo id='HY9Pe'><pre id='HY9Pe'><center id='HY9Pe'></center></pre></bdo></b><th id='HY9Pe'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='HY9Pe'><tfoot id='HY9Pe'></tfoot><dl id='HY9Pe'><fieldset id='HY9Pe'></fieldset></dl></div>
          • <bdo id='HY9Pe'></bdo><ul id='HY9Pe'></ul>

              <tfoot id='HY9Pe'></tfoot>

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

            1. <legend id='HY9Pe'><style id='HY9Pe'><dir id='HY9Pe'><q id='HY9Pe'></q></dir></style></legend>

                    <tbody id='HY9Pe'></tbody>
                  本文介紹了專用模板類的靜態成員初始化的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..
                  class A
                  {
                  };
                  
                  template <typename A, int S>
                  class B
                  {
                  public:
                          static int a[S];
                  
                          B()
                          {
                                  a[0] = 0;
                          }
                  };
                  
                  template<> int B<A, 1>::a[1];
                  
                  int main()
                  {
                          B<A, 1> t;
                          t;
                  }
                  

                  它在 GCC 4.1 下編譯,但不鏈接:

                  It compiles under GCC 4.1, but does not link:

                  static.cpp:(.text._ZN1BI1ALi1EEC1Ev[B<A, 1>::B()]+0x5): undefined reference to `B<A, 1>::a'
                  

                  如果可能的話,我更愿意保持專門的初始化,因為數組保存了一些特定于類型的數據.

                  I would prefer to keep initialisation specialised if it is possible, since the array holds some data specific to the type.

                  推薦答案

                  對于靜態成員特化,如果不初始化成員,則視為特化聲明,只說哦,不要從主模板實例化成員,因為在其他地方有專門的定義".需要說明的是,定義應該出現在.cpp文件中(否則,你會得到相反的結果:多個定義),沒有初始化器的聲明仍然應該放在頭文件中.

                  For static member specializations, if you don't initialize the member, it is taken as a specialization declaration, that just says "Oh, don't instantiate the member from the primary template, because there is a specialized definition somewhere else". It should be mentioned that the definition should appear in a .cpp file (otherwise, you will earn the opposite: multiple definitions), and the declaration without initializer should still be placed in the header file.

                  現在正確的語法確實如下,它應該出現在頭文件中,而是出現在.cpp文件中

                  Now the correct syntax is indeed the following, and it should not appear in a header file, but in a .cpp file

                  template<> int B<A, 1>::a[1] = { };
                  

                  以下內容仍應出現在頭文件中:

                  The following should still appear in a header file:

                  template<> int B<A, 1>::a[1];
                  

                  這將作為專業化聲明.

                  由此可知,您不能特化一個只有默認構造函數且不可復制的成員,因為您需要以下語法:

                  From this, it follows that you can't specialize a member that only has a default constructor and is not copyable, because you would need this syntax:

                  // needs a copy constructor!
                  template<> Type Class<Arguments>::member = Type();
                  

                  C++0x 修復了這個:

                  C++0x fixes this:

                  // doesn't anymore need a copy constructor
                  template<> Type Class<Arguments>::member{};
                  

                  <小時>

                  對于我們當中的標準人來說,這里是引述:


                  For the Standardese people among us, here are the quotes:

                  14.7.3/6:

                  如果模板、成員模板或類模板的成員是顯式特化的,則應在第一次使用該特化之前聲明該特化,這將導致隱式實例化發生,在每個翻譯單元中,使用發生;不需要診斷.

                  If a template, a member template or the member of a class template is explicitly specialized then that specialization shall be declared before the first use of that specialization that would cause an implicit instantiation to take place, in every translation unit in which such a use occurs; no diagnostic is required.

                  14.7.3/15:

                  如果聲明包含初始化程序,則模板的靜態數據成員的顯式特化是定義;否則,它是一個聲明.[注意:需要默認初始化的模板的靜態數據成員的定義沒有語法.

                  An explicit specialization of a static data member of a template is a definition if the declaration includes an initializer; otherwise, it is a declaration. [Note: there is no syntax for the definition of a static data member of a template that requires default initialization.

                  template<> X Q<int>::x;
                  

                  這是一個聲明,不管 X 是否可以默認初始化(8.5).]

                  This is a declaration regardless of whether X can be default initialized (8.5). ]

                  3.2/3:

                  每個程序都應包含該程序中使用的每個非內聯函數或對象的一個??定義;無需診斷.

                  Every program shall contain exactly one definition of every non-inline function or object that is used in that program; no diagnostic required.

                  3.2/5:

                  一個類類型(第 9 條)、枚舉類型(7.2)、具有外部鏈接的內聯函數(7.1.2)、類模板(第 14 條)、非靜態函數模板(14.5)可以有多個定義.5)、類模板的靜態數據成員 (14.5.1.3)、類模板的成員函數 (14.5.1.1) 或在程序中未指定某些模板參數的模板特化 (14.7, 14.5.4)[...]

                  There can be more than one definition of a class type (clause 9), enumeration type (7.2), inline function with external linkage (7.1.2), class template (clause 14), non-static function template (14.5.5), static data member of a class template (14.5.1.3), member function of a class template (14.5.1.1), or template specialization for which some template parameters are not specified (14.7, 14.5.4) in a program [...]

                  將此限制為未指定某些模板參數"意味著我們可以執行以下操作,將其放入標題中(因此可能具有此專業化的多個定義):

                  The restriction of this to "for which some template parameters are not specified" means that we are allowed to do the following, placing it into a header (thus possibly having multiple definitions of this specialization):

                  template<> template<typename T>
                  Type OuterClass<int>::InnerClass<T>::StaticMember = 0;
                  

                  在您的情況下,您已經指定了所有參數,因此它不受允許多個定義的單一定義規則的約束.

                  In your case, you have all parameters specified, making it not being covered by the one defintion rule for allowing multiple definitions.

                  這篇關于專用模板類的靜態成員初始化的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  Why do two functions have the same address?(為什么兩個函數的地址相同?)
                  Why the initializer of std::function has to be CopyConstructible?(為什么 std::function 的初始化程序必須是可復制構造的?)
                  mixing templates with polymorphism(混合模板與多態性)
                  When should I use the keyword quot;typenamequot; when using templates(我什么時候應該使用關鍵字“typename?使用模板時)
                  Dependent name resolution amp; namespace std / Standard Library(依賴名稱解析命名空間 std/標準庫)
                  gcc can compile a variadic template while clang cannot(gcc 可以編譯可變參數模板,而 clang 不能)
                  <tfoot id='4h0oD'></tfoot>

                        • <bdo id='4h0oD'></bdo><ul id='4h0oD'></ul>

                          <small id='4h0oD'></small><noframes id='4h0oD'>

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

                            主站蜘蛛池模板: 精品成人一区二区 | 91精品一区二区三区久久久久久 | 毛片一区二区三区 | 欧美456 | 国产亚洲成av人片在线观看桃 | 国产二区三区 | 欧美黄色片 | 久色视频在线 | 毛片一级片 | 国产日韩视频在线 | 特级毛片爽www免费版 | 亚洲国产欧美一区二区三区久久 | 一级视频在线免费观看 | 精品一区二区在线观看 | av片毛片 | 午夜天堂精品久久久久 | 永久精品 | 午夜影院免费体验区 | 国产成人精品久久二区二区91 | 希岛爱理在线 | 日韩精品一区二区三区 | 国产一区二区三区在线免费 | 亚洲精品国产精品国自产在线 | av免费成人 | 国产精品亚洲一区二区三区在线 | 中文字幕 亚洲一区 | 超碰人人做 | 亚洲福利在线观看 | 国产精品美女久久久久aⅴ国产馆 | 看av网址| 在线成人 | 日韩一区二区三区在线看 | 欧美日韩久久久 | 9999国产精品欧美久久久久久 | 人人干视频在线 | 亚洲国产成人精品久久久国产成人一区 | 国产成人综合网 | 一区二区三区韩国 | 国产综合精品一区二区三区 | 久久成人国产 | 毛片免费观看视频 |