[英]Can special member functions be defaulted if they use typedefs?
Clang 編譯得很好,但是 GCC 和 MSVC 抱怨operator=不能默認: 這段代碼合法嗎? 如果不是,如果Me被定義為typedef S Me; ? ...
[英]Can special member functions be defaulted if they use typedefs?
Clang 編譯得很好,但是 GCC 和 MSVC 抱怨operator=不能默認: 這段代碼合法嗎? 如果不是,如果Me被定義為typedef S Me; ? ...
[英]Why C++20 allows defaulted comparison to compile even when it is deleted?
考慮以下代碼: clang 給出了一個很好的警告: 警告:顯式默認的相等比較運算符被隱式刪除 [-Wdefaulted-function-deleted] bool operator == (const B& other) const = default; 但我想知道為什么這個代碼甚至被 ...
[英]Why does copy-and-swap in a base class cause the copy-assignment operator to be implicitly deleted in the derived class?
僅在GCC和Clang 中測試,基類中存在按值傳遞的復制賦值運算符(在實現復制和交換(或復制和移動)習慣用法時很有用)導致復制賦值運算符在派生類被隱式刪除。 Clang 和 GCC 同意這一點; 為什么會這樣? 示例代碼: ...
[英]C++ implicit definition of special functions
在當前版本的 C++ 草案(2019 年 9 月)中, [class.default.ctor]/4段指出: 一個默認且未定義為已刪除的默認構造函數在它被 odr-used ([basic.def.odr]) 用於創建其 class 類型 ([intro.object]) 的 object 時被隱式 ...
[英]Why is the constructor of std::in_place_t defaulted and explicit?
cppreference顯示了std::in_place_t的以下定義: 為什么他們添加了一個explicit默認構造函數? 為什么不被遺漏? 有什么好處? ...
[英]C++11 deleted/defaulted constructors
我對在C ++ 11和C ++ 17中如何/為什么調用構造函數感到困惑。 所以當我取消注釋某些行的組合(並使用帶有clang的c ++ 17標准標志進行編譯)時,我會感到困惑: 1,編譯。 列出A和A1 init,以及A2的默認復制構造函數 2,編譯。 A和列表in ...
[英]What are the pros and cons of always declaring defaulted constructors?
為每個非用戶定義的構造函數聲明始終默認的構造函數的利弊是什么? 考慮一個具有用戶定義的構造函數的類,該類不需要其他用戶定義的構造函數,它將是: 這樣做還有其他實際的優點/缺點嗎? ...
[英]Efficiently creating C++11 move and copy aware structs
我試圖將可以利用高效std :: move / copy構造/和賦值操作的高效C ++ 1x結構放在一起。 這些結構分為2個基本類別,即POD結構和非POD結構。 我已經養成了使用樣板代碼編寫這些結構的習慣,但是我很確定編譯器在此方面的工作比我可以做的更好,並且每個類的鍵入都很多。 我的問 ...
[英]Visual Studio C2580 when using default keyword
對於以下代碼: 我收到一條錯誤消息: 錯誤 C2580“S::S(void)”:不允許使用多個版本的默認特殊成員函數 我不明白。 我認為該錯誤是由模板化構造函數引起的(通過將其注釋掉並編譯程序來驗證這一點)。 ...
[英]=default ignores access specifier?
我發現很奇怪,盡管默認構造函數是private (4.8.1 g ++),但下面的程序仍然編譯得很好: 實際上從標准的8.4.2 [2](N3242) 顯式默認函數只有在被隱式聲明為constexpr時才可以聲明為constexpr。 如果在第一次聲明中明確違約, ...
[英]Are user-defined default constructors less efficient?
幾天前,在閱讀標准C ++新聞時,我讀過有關C ++ 11中默認函數的帖子,在那篇文章中提到用戶定義的構造函數效率低於編譯器生成的函數: 用戶定義的默認構造函數的效率低於編譯器隱式定義的默認構造函數。 繼續閱讀,有一個例子,用戶定義的構造函數被標記為默認值,然后說: ...
[英]Can I default a private constructor in the class body or not?
GCC 4.5不允許我這樣做: 它抱怨說: 錯誤:使用非公共訪問聲明的'foo :: foo(const foo&)'不能在類體中默認 錯誤:聲明為非公共訪問的'foo&foo :: operator =(const foo&)'不能在類體中默認 但是,GCC 4. ...
[英]How can one default a special member function if one doesn't know its parameter types?
考慮這種情況: 我顯式聲明了一個移動構造函數,所以如果我想要一個未刪除的復制構造函數,我需要顯式聲明一個復制構造函數。 如果我想default它,我怎樣才能找到正確的參數類型? 我也對您是否遇到過在實際程序中實際出現這種情況的情況感興趣。 規范說明確默認的 function 應... 具有相同聲明 ...
[英]Why would you “default” a copy/move constructor or a destructor?
C ++ 0x允許您將某些函數指定為默認值: 這些函數的實現與編譯器生成它們的情況相同,這種情況通常在您未聲明自己的情況下在大多數情況下發生。 如果您聲明任何ctor(上述任何其他ctor),則不會生成默認ctor,因此您可能需要將其默認為“將其恢復”。 但是,除非基類或數據 ...
[英]What's the point in defaulting functions in C++11?
C ++ 11增加了告訴編譯器創建任何特殊成員函數 的默認實現的能力。 雖然我可以看到刪除函數的價值,但顯式默認函數的值是什么? 只需將其留空,編譯器無論如何都會這樣做。 我能看到的唯一一點是,只有當沒有其他構造函數存在時才會創建默認構造函數: 但這真的比你現在這樣做好嗎? ...