![](/img/trans.png)
[英]Is overloading on universal references now much safer with concepts in c++ 20
在 Scott Meyers 的“Effective Modern C++”一書中,給出了(第 26/27 項)“避免在通用引用上重載”的建議。 他這樣做的理由是,在幾乎所有對包含通用引用的重載 function 的調用中,編譯器都會解析為通用引用,即使這通常不是您打算解析的 function。 ...
[英]Is overloading on universal references now much safer with concepts in c++ 20
在 Scott Meyers 的“Effective Modern C++”一書中,給出了(第 26/27 項)“避免在通用引用上重載”的建議。 他這樣做的理由是,在幾乎所有對包含通用引用的重載 function 的調用中,編譯器都會解析為通用引用,即使這通常不是您打算解析的 function。 ...
[英]Initializer in braces and parentheses - From Item 7 in Modern Effective C++
在《Effective Modern Cpp》一書的Chapter7,Item 7中,討論了創建對象時()和{}的區別。 然而,當我編譯並運行本章中列出的一些代碼時,我發現代碼的行為與注釋描述的不同。 我必須指出,我用於測試的代碼是我編寫的,因此與書中的原始代碼不完全相同,但它更簡單,足以涵蓋我的觀 ...
[英]Can I cache after using std::make_shared?
我正在閱讀 Effective Modern C++ (Scott Meyers)並嘗試第 21 項中的一些內容。這本書說使用std::make_shared的副作用是 memory 在所有shared_ptr和weak_ptr都消失之前不能被釋放(因為控制塊與內存一起分配)。 我預計這將意味着, ...
[英]Recursive constexpr function
我正在閱讀 Effective Modern C++ 並想嘗試使用 const 表達式的非常基本的 function。 我的 C++ 技能真的不是很好,但是我想不通這個基本代碼有什么問題: 如評論中所述,如果我使用 return x == 43337,則此代碼有效,但任何較大的值都會導致分段錯誤。 ...
[英]What does it mean that the emplacement function adds a new element to a container via construction in place istead of via assignment?
在Effective Modern C++的第 41 項中,Scott Meyers 提到了這種差異及其對插入效率的影響。 我對此有一些疑問,但在提出問題之前,我需要了解這兩種添加元素的方式之間的區別是什么。 考慮書中的代碼示例:std::vector<std::string> vs; ...
[英]Confusion about the different efficiency between emplacement and insertion for containers not allowing duplicates
在Effective Modern C++的第 41 項中,以下情況之一是使 emplacement 函數有可能比插入 conterparts 性能更高的情況之一: 容器不太可能拒絕新值作為重復項原因是,考慮到 arguments 給試圖插入容器的對象的構造函數, emplace function ...
[英]Understanding comment from the errata about Item 41 of EMC++
在 Item 41 中,Scott Meyers 編寫了以下兩個類:class Widget { public: void addName(const std::string& newName) // take lvalue; { names.push_back(newName) ...
[英]What would a default lambda capture mode via init capture be like?
使用 lambda,在 C++11 中,我們可以將默認捕獲模式設置為按值/按引用,例如[=] / [&] ,對於某些變量,可選地后跟顯式捕獲,按引用/按值,例如[=,&this_is_by_ref]或[&,this_is_by_value] 。 在 C++14 中,我們也可 ...
[英]What is the “source object is lvalue” scenario, mentioned in EMC++, where move semantics offer no efficiency gain
Effective Modern C++ 中的第 29 項,Scott Meyers 列出了移動語義不會提高代碼性能的三種場景, […] 移動語義對你沒有好處: 無移動操作:要從中移動的 object 無法提供移動操作 […] 移動不快: […] 移動操作不比其復制操作快。 移動不可用:上下文 ...
[英]Understanding of Scott Meyers' third example of std::weak_ptr
Effective Modern C++第 137 頁的最后一個例子描繪了一個數據結構的場景,其中包含對象A 、 B和C ,通過std::shared_ptr以下列方式相互連接: std::shared_ptr std::shared_ptr A ──────────────── ...
[英]About std::cout, why use “extern” rether than “singleton pattern”
我讀了有效的C ++ ,其中提到了項目04 通過將非本地靜態對象替換為本地靜態對象,避免跨翻譯單元的初始化順序問題。 我認為“全局且只有一個對象”應該是單例模式,而不是在我閱讀此項目后的外部對象。 例如I / O對象(std :: cout) 但是std :: co ...
[英]Do strncpy/memcpy/memmove copy the data byte by byte or in another efficiently way?
眾所周知,在x86 / x86_64這樣的多字節字計算機中,逐字復制/移動大量內存(每步4或8個字節)比逐字節更有效。 我很好奇strncpy / memcpy / memmove會做什么,以及它們如何處理內存字對齊。 ...
[英]Effective C++: Item 41 - confusion about Implicit interfaces
我正在閱讀有效的C ++,第41項,標題為“理解隱式接口和編譯時多態性” ,它給出了這個例子,接下來是一個解釋,但我不理解這一部分。 ...,T必須支持一個size成員函數,.....,但是這個成員函數不需要返回一個整數類型。 它甚至不需要返回數字類型。 就此而言,它甚至不需要返 ...
[英]How to understand “implementations of virtual constructors” in Effective C++
在有效的C ++ 3rd,第31項,p146-p147中,它說 這一切都發生在包含虛擬構造函數實現的文件內部的幕后。 我不確定在這句話中如何理解虛擬構造函數。 據我所知,C ++中沒有強大的構造函數。 那么,此語句在有效C ++中是否是一個錯誤? 或者,此虛擬 ...
[英]How many temporary objects are created when two objects are added together without the return value optimization?
在閱讀Scott Meyers所着的“更有效的C ++”一書的第20和22項后,我決定提出這個問題。 假設你寫了一個代表有理數的類: class Rational { public: Rational(int numerator = 0, int denominator = 1) ...
[英]How reference deduce works?
可以復制到此 。 我讀了《 有效的現代C ++》 。 在Item 1下,我找到了一個可供普遍參考的案例: 對於最后一個例子, f(27); 我在VS2013下進行了測試。 這是輸出: 我發現在沒有std::forward<T>(param)的模板函數中 ...
[英]can pimpl idiom's impl class has destructor?
我在有效的現代cpp中學習了pimpl,經過一番搜索,沒有人談論pimpl習慣用法的impl類的析構器,這是不必要的嗎? ...
[英]C++ default move operation in “Effective Modern C++”
第17項:了解特殊成員函數生成。 移動操作僅針對缺少類別生成 顯式聲明了移動操作,復制操作或析構函數。 現在,當我提到移動操作移動構建時 或移動 - 分配數據成員或基類 並不保證會實際采取行動。 實際上,“成員行動”更像是成員 移動請求,因為未啟用移動的類型 ...
[英]Deducing the types
我在遍歷Scott Meyer的《 Effective Modern C ++》時試圖理解類型推導。 考慮下面的代碼片段: 他說,由於paramType是引用,因此我們可以按照兩步過程來推導T的類型: 忽略expr引用(如果有的話)(即x , cx和rx ) 模式 ...
[英]How to understand the typedef in this declaration
最近,我讀了有效C ++這本書,第35項中有關於typedef的聲明使我感到困惑。 所以我的第一個問題是:為什么作者在這里使用前瞻性聲明? 有什么具體原因嗎? 我的第二個問題是:我如何理解typedef聲明,以及如何使用它? 我只知道像typedef int MyInt; ...