![](/img/trans.png)
[英]Why C++ forces initialization of member variables to be in the order of the declaration
我知道在 C++ 中,類頭中成員的聲明定義了初始化順序。 你能告訴我為什么 C++ 選擇這種設計嗎? 強制初始化順序而不是遵循初始化列表有什么好處嗎? ...
[英]Why C++ forces initialization of member variables to be in the order of the declaration
我知道在 C++ 中,類頭中成員的聲明定義了初始化順序。 你能告訴我為什么 C++ 選擇這種設計嗎? 強制初始化順序而不是遵循初始化列表有什么好處嗎? ...
[英]C++ multiple access specifiers and order of initialization
我們知道在下面的代碼中 “i”將在“b”之前初始化。 如果我嘗試在“i”之前初始化“b”,我會收到警告。 這個案例怎么樣: ? 我們知道編譯器可以自由排序“i”和“b”,因為它們位於不同的訪問說明符中。 那么在這種情況下初始化的順序是什么? 像前面的簡單案例一樣有任何保證嗎? ...
[英]When is the destructor of a constinit object called?
一般來說,static對象的析構函數的調用順序與構造函數的相反。 據我了解, constinit 對象是在編譯時初始化的,因此應該在“普通” static 對象的析構函數之后調用它們的析構函數。 該程序 (使用 GCC 10),但是,給出了 output 即 constinit object 在 ...
[英]Using cout in the constructor of a class that is included in another class as a static member
以下代碼 使用 gcc 編譯后成功,但使用 clang 編譯后因分段錯誤而崩潰。 代碼不標准還是 clang 錯誤? https://godbolt.org/z/tEvfrW ...
[英]Visual C++: Is global variables initialization order deterministic during DLL loading?
假設我構建了簡單的 DLL,包含兩個翻譯單元: 第一的 第二個 我知道 C++ 標准沒有指定全局變量初始化的順序。 問題是:一旦我有了構建的 Windows DLL,在LoadLibrary調用期間執行的全局變量初始化的順序是確定的(每個LoadLibrary調用都會以相同的順序啟動變量g ...
[英]C++ passing const value of derived class to constructor of base unexpected behavior
我認為這是相當基本的,但我在這里找不到任何來源。 派生的 class 包含需要傳遞給基礎 class 的初始化信息。 在這種情況下,它是 memory 預留。 這慘不忍睹。 我希望在派生構造函數之前調用基本構造函數,並且僅在調用派生構造函數時才分配 memorySize。 這按預期工作。 我的問題: ...
[英]Can I make a constexpr object of std::set?
我需要一個 std::set 的 const object,它將用於許多其他 cpp 文件。 由於應用程序每個部分的初始化順序未定義,因此當我使用此 std::set obj 初始化其他 const 對象時,我可能會得到一個空集。 所以,我想把這個 std::set 設置為 constexpr,但 ...
[英]When are inline variables in static storage initialized?
C++ 標准(至少早於 C++17)已經說明了初始化順序。 在同一個翻譯單元的命名空間范圍內定義並動態初始化的靜態存儲持續時間的對象應按照其定義在翻譯單元中出現的順序進行初始化。 C++17 引入了內聯變量,我相信這意味着可以在多個翻譯單元中定義具有靜態存儲持續時間和命名空間范圍以及動 ...
[英]Assignment operation in member initializer lists
我有以下堆棧類。 注意復制構造函數中的分配。 即使使用-Wall -Wextra標志,代碼也可以正常工作,編譯良好並且編譯器(gcc)也不會抱怨。 編譯器會自動將其重寫為嗎? 還是還有其他魔術? 我注意到,當我更改定義順序時,編譯器會抱怨按順序初始化。 所以我認為是我提到 ...
[英]Initializing companion object after inner objects
假設我想創建密封類,填充一些對象。 然后我想創建所有這些對象的列表,所以我在companion對象中創建列表: 但是,上面代碼的問題是,當第一次直接調用Color.Blue時,伴隨對象在Blue之前被初始化,因此結果列表包含[Red, null] 。 這是雙重問題,因為Kotlin假 ...
[英]In C++, given namespace-wide const float dependant on a global const float, is their initialization order guaranteed?
如果有一對.h / .cpp文件分別具有類似的東西, 和 在它們中,和另一個.cpp文件有類似的東西 在它中,是否保證upperLimit在ge之后被初始化? 我知道來自不同翻譯單元的全局對象的無限初始化順序。 我想確定混合全局和命名空間對象的情況是否正確。 ...
[英]Why do I get an NPE when a nested Enum references a parent static member in its constructor?
重建的條件(據我所知): 嵌套枚舉引用父靜態成員 嵌套類 父類的靜態成員將枚舉作為嵌套類的構造函數參數 枚舉在父類中的任何其他內容之前由外部類引用 在線運行此代碼: https : //repl.it/repls/PlushWorthlessNetwor ...
[英]std::atexit ordering when called from a global object's constructor
cppreference說關於std::atexit : 這些函數可以與具有靜態存儲持續時間的對象的銷毀同時被調用,並且保持如果在B的注冊之前如果A的注冊被排序,則在調用之前對B的調用進行排序的保證。 A,同樣適用於靜態對象構造函數和對atexit的調用之間的順序 我理解這段話 ...
[英]Are functions calls in a constructor's initializer-list sequenced?
考慮: 我知道, a是前初始化b由於他們在聲明的順序struct 。 我也知道g(f(), f())中對f的兩個調用是未排序的。 所以我想知道是否可以保證ta == 0和tb == 1 ? ...
[英]Named Parameter Idiom using a pointer to a class private method
我在執行可能不是真正的“常規”操作時遇到了C ++編譯錯誤。 為了使事情變得更容易,我只是重新編寫了我試圖以一種易於閱讀的方式使用的機制,並檢查了是否遇到了同樣的問題。 首先,這里是代碼: test.h //-- C ++ -- test.cpp //-- C ++ -- ...
[英]Static initialization order in class heirarchy
我最近痛苦地意識到靜態初始化命令Fiasco 。 我想知道,如果在翻譯單元中“初始化順序未定義”的規則仍然適用於父類中的靜態成員,而子類中的靜態成員則需要這樣。 例如,假設我們有(為簡潔起見,所有#wards和包括) 然后是A的子類, 這里有兩個轉換單元,其中一個靜態對象 ...
[英]Is it a good idea to use initialization sections for module registration?
我正在為分散式模塊注冊尋找一個好的解決方案。 我不想要一個使用項目所有模塊單元的單元,但我寧願讓模塊單元自己注冊。 我能想到的唯一解決方案是依賴於Delphi單元的initialization 。 我寫了一個測試項目: 單元2 UNIT3 UNIT4 ...
[英]How can I store in a derived class information obtained during initialization of a base class?
我的情況是,作為初始化基類的數據的副作用,派生類計算以后必須通過其接口可用的信息。 以下給出了問題的概念,使用布爾值作為所需信息: 這樣做的問題是,在初始化派生類的自己的數據成員之前,在基類的初始化期間計算重要的信息。 因此,我必須不寫入派生類的數據元素。 雖然我確信我可以在過去2 ...
[英]C++ standard: why are some “orders” defined and some not?
有了一個類,它的成員的初始化順序在構造函數中得到了嚴格的定義(例如,在這個問題中 ,可能允許成員之間的依賴關系-但我認為這更多是一個設計問題,我可以想象循環依賴關系)。 有一個函數調用,沒有定義參數評估的順序,我認為這是為了實現C兼容性。 對於以下“可怕的鑽石”問題,我們有一 ...
[英]object cross-references and initialization order
我有以下代碼: 因此,一開始,因為每個對象都包含一些要初始化的東西,所以我稱 然后在程序的某個位置,當我使用對象的cs參數時,我得到了NullPointerException因為Seq引用的對象之一實際上為null (打印到控制台上表明了這一點)。 即,對具有其init調用晚於 ...