uniform-initialization

    4熱度

    1回答

    當我將一些C++ 98代碼更新到C++ 11時,我注意到統一初始化並不那麼統一。其中一些與像void這樣的不完整類型有關,而其他則與pod有關。例如對於普通可複製類型,當初始化涉及複製/移動構造函數時,統一初始化不適用於直接初始化或複製初始化。 例如 template<class T> T foo() { return T("Hello World");} foo<void>(); foo<

    2熱度

    1回答

    是否存在一種半透明方式,可以使用類似於統一初始值設定項的方式編碼,而不使用實際功能? 我願意放棄類型安全和統一初始化的其他方面的限制(我會檢查他們與其他編譯器的有效性),但我不想放棄像 return { "foo", "bar" }; set<string> my_strings = { string_a, string_b }; 好的語句 將這些宏轉換爲兼容代碼的宏,對於具有非統一初始化能

    10熱度

    1回答

    我通過以下編譯器錯誤驚訝: template <typename T> struct A { A(T t): t_{t} {} T t_; }; struct S { }; int main() { A<S> s{S{}}; } 該錯誤是(與鐺): test.cpp:4:16: error: excess elements in struc

    7熱度

    1回答

    這個問題也被提交給Usenet,它更合適,但這是一個更大和更可靠的論壇。 std::allocator::construct被定義轉發它的參數參數 包對象構造使用括號,又名直接初始化。 如果使用大括號,又名統一初始化,我們可以從功能,例如std::make_shared和 container::emplace初始化 聚合數據類型。此外,將初始化列表的內容 放入該功能的參數列表中, 可以解決轉發下的

    11熱度

    1回答

    C++ 11 程序初始化vector,命名myVec,的intvector s,然後使用循環來打印出每個內vector的元件。但是當我嘗試使用額外的花括號時,看到會發生什麼,我得到了意想不到的結果。編譯器之間的輕鬆切換也適用於this LiveWorkSpace。 g++ 4.8.0只能彙編到myVec[5]。 clang++ 3.2編譯一切: #include <iostream> #incl

    9熱度

    1回答

    在C++ 11中,我們爲對象提供了很好的統一初始化語法。爲什麼它沒有擴展到初始化非對象類型呢? 是否有任何語法歧義,或者它只是我問的一些愚蠢的問題? 實施例: struct s{ int k;}; s s1{1}; //ok (object initialization) s const& s3{3}; //ok (object initialization) s& s2{s1}; //er

    6熱度

    1回答

    這是可能的構建體的載體具有一個迭代範圍,就像這樣的初始化列表構建體容器: std::vector<std::string> vec(std::istream_iterator<std::string>{std::cin}, std::istream_iterator<std::string>{}); 但我也可以編譯並使用C++ 11均勻初始化語法運行代碼(注意護腕),如下

    6熱度

    2回答

    我有這個代碼來初始化映射到unique_ptr。 auto a = unique_ptr<A>(new A()); map<int, unique_ptr<A>> m; m[1] = move(a); 我可以使用統一初始化嗎?我試過 map<int, unique_ptr<A>> m {{1, unique_ptr<A>(new A())}}; 但是我得到一個錯誤。 錯誤消息的某些部

    7熱度

    2回答

    我經常遇到POD結構中的代碼,與memset手動零初始化像這樣: struct foo; memset(&foo, 0, sizeof(foo)); 我檢查了C++ 11標準和它說:「,其初始值設定一個目的是一個空集的括號,即(),應進行初始化。「跟着:「要初始化類型T的[pod結構體]意味着...對象是零初始化的。」 那麼......這是否意味着你可以始終安全凝結在上面的代碼只是以下幾點:

    2熱度

    1回答

    我正在學習新的C++ 11功能 - 統一初始化。寫小程序: #include <iostream> using namespace std; class C { public: C(int a = 1, int b = 2) : a_{a}, b_{b}, n{0,1,2,3,4} {}; int n[5]; int a_,b_; }; int mai