static-order-fiasco

    2熱度

    1回答

    所以我建立一個語法編譯器ANTLR和一些生成的代碼看起來是這樣的: const int ExampleClass::EXAMPLEVAR = OtherExample::OTHEREXAMPLEVAR; 正如你可以看到這符合「靜態變量初始化順序的悲劇」的描述。 問題是,這個項目的目標之一是生成的C++代碼可以用作進一步語法編譯的基礎,儘可能容易。 這就是爲什麼在這種情況下「首次使用構造」範式可

    2熱度

    1回答

    我試圖讓對象轉儲打印靜態C++對象的構建順序。我發現-h爲標題,但我似乎無法讓objdump繼續前進。 計劃沒有與init_priority $ objdump -h cryptest.exe cryptest.exe: file format elf64-x86-64 Sections: Idx Name Size VMA LMA File off Algn

    9熱度

    2回答

    我有下一種情況:我需要在獨立靜態庫中創建小部件,然後將它與最終應用程序(visual C++ 9.0,qt 4.5)鏈接。 這個靜態小部件庫包含一些資源(圖標),並由幾個.cpp文件(每個包含獨立小部件)組成。據我所知,我必須初始化qt資源系統,如果我在靜態庫中使用它們(資源),並調用「Q_INIT_RESOURCE(resource_file_name)」。我解決了這個用下面的代碼(在靜態庫中的

    3熱度

    2回答

    我目前正在學習C++,並且遇到一些麻煩。 我開發了一個程序,使用大量的#define,但我想用static const代替(碰撞/類型/範圍...)。 所以,我現在有這樣的: file1.hpp class A { public: static const std::string MY_CONST_VAR; }; file1.cpp const std::string A

    4熱度

    1回答

    根據C++ 11規格: 包括<iostream>在翻譯單元應爲如果<iostream>具有靜態存儲定義的ios_base::Init一個實例的結果持續時間。同樣,整個程序應表現爲,如果有至少 一個具有靜態存儲持續時間ios_base::Init實例 這意味着,如果我的代碼看起來像這樣: // A.cpp #include <iostream> using namespace std; uns

    7熱度

    3回答

    一旦我正在閱讀一個非常棒的C++常見問題解答(它真的很棒!! https://isocpp.org/faq)並閱讀了有關如何防止靜態初始化順序「失敗」的主題。所以作者建議將靜態變量包含到函數中,從而通過維護變量的創建順序來防止「失敗」。但這在我看來似乎是一個粗魯的解決方法。所以我的問題是,是否有任何現代的,更模式化的方式來防止這種「慘敗」,而是將「靜態的東西」封裝到函數中?

    6熱度

    2回答

    比方說,我們有兩個編譯單元如下: // a.cpp extern int value2; int value1 = value2 + 10; // b.cpp extern int value1; int value2 = value1 + 10; 當我試圖在VC2010,它初始化value1和value2第一爲零。是不是都動態初始化value1和value2並且默認初始化不適用於

    6熱度

    3回答

    靜態STL容器的雙初始化周圍有「靜態變量初始化順序的悲劇」了幾個很好的問題和答案在這裏,但我似乎已經撞到它的另一個表現,特別難看,因爲它不會崩潰但會泄漏並泄露數據。 我有一個自定義C++庫和一個鏈接它的應用程序。庫中有一個靜態STL容器,用於註冊一個類的所有實例。這些實例恰好是應用程序中的靜態變量。由於「慘敗」(我相信),我們在應用程序初始化過程中讓容器充滿應用程序實例,然後庫進行初始化並重置容器

    9熱度

    11回答

    這裏最近的一個問題有下面的代碼(很好,類似於這個)來實現沒有同步的單例。 public class Singleton { private Singleton() {} private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton();

    17熱度

    4回答

    我是從一本書閱讀SIOF它舉了一個例子: //file1.cpp extern int y; int x=y+1; //file2.cpp extern int x; int y=x+1; 現在我的問題是: 在上面的代碼中,將下面的事情發生嗎? 編譯file1.cpp時,編譯器會保留y,因爲它不會爲它分配存儲空間。 編譯器爲x分配存儲空間,但不初始化它。 編譯file2.cpp時,