cost 376 ms
在沒有復制/移動構造函數的情況下初始化 class 的 std::array?

[英]Initialize an std::array of a class without a copy/move constructor?

假設我有一個 class 沒有名為A的默認構造函數。 我可以在沒有復制/移動構造函數的情況下創建一個A對象數組(例如下面代碼中的l_Array ),但是當該數組是另一個 class 的成員時我會出錯(例如下面代碼中的初始化b )。 是否可以實現class初始化?#include <iostr ...

我可以將不可移動且不可復制的 function 結果復制到可選結果中嗎?

[英]Can I copy-elide an immovable & uncopyable function result into an optional?

我想在std::optional中存儲一個不可移動且不可復制的非平凡類型。 然而,object 是由免費的 function 構建的。(示例) 不改變Foo或foo() ; 感謝復制省略,我已經可以做到這一點: 這也可以編譯,因為std::optional只要求存儲的類型是可破壞的: 但我無法用 ...

將 -fno-elide-constructors 標志傳遞給編譯器時的副本數

[英]Number of copies when -fno-elide-constructors flag is passed to the compiler

考慮以下課程: 和一個簡單的工廠方法 我想在禁用復制省略的情況下進行編譯,以查看調用復制構造函數的次數。 我得到這個輸出: 所以復制構造函數被調用了兩次,但我真的不明白為什么。 在運行這個實驗之前,我敢打賭一個電話就足夠了。 我想知道這兩個副本而不是一個副本背后是否有任何動機,或者它只是特定於實現的 ...

為什么“保證復制省略”不意味着 push_back({arg1, arg2}) 與 emplace_back(arg1, arg2) 相同?

[英]Why doesn't "Guaranteed Copy Elision" mean that push_back({arg1, arg2}) is the same as emplace_back(arg1, arg2)?

首先,我聽說Guaranteed Copy Elision是用詞不當(據我目前了解,它更多是關於從根本上重新定義基本價值類別,r/l-values 到 l/x/pr-values,這從根本上改變了意義和副本的要求),但由於這是通常所說的,我也會這樣做。 在閱讀了一些關於這個主題的內容之后,我想我終 ...

給定工廠 object 和可變參數 arguments 列表,是否可以就地初始化 std::variant ?

[英]Is it possible to in-place initailize std::variant given a factory object and variadic arguments list?

std::variant有一個構造函數,它接受std::in_place_t<Type>, Args &&... arguments 導致就地構造。 我想知道是否有可能在給定工廠 object 的情況下就地構造: https://godbolt.org/z/rY5W ...

使用寄存器按值返回基本類型的實現是否執行“臨時實現”?

[英]Does an implementation that returns fundamental types by value using registers do "temporary materialization"?

(c++20;工作草案 N4868) [stmt.return]/2表示return語句通過復制初始化初始化glvalue結果或prvalue結果object return 語句通過操作數的復制初始化 (9.4) 初始化(顯式或隱式) function 調用的泛左值結果或純右值結果 obje ...

從花括號初始化列表直接初始化中的復制省略

[英]Copy-elision in direct initialization from braced-init-list

在以下程序中,object A a直接從 braced-init-list {A{}}初始化: MSVC 和 GCC 在這里打印0表示發生復制省略。 並且 Clang 打印1執行復制構造函數。 在線演示: https://gcc.godbolt.org/z/1vqvf148z 哪個編譯器在這里? ...

確保沒有副本以價值回報的最佳策略

[英]best strategy for ensuring no copies in return by value

我正在使用 c++17,但我無法選擇我的編譯器。 假設我有帶有移動和復制語義的類型 S。 通常對我來說 S 將是某種聚合類型的 std::vector 。 我還使用了 function g,它按值返回 S: S g(int x); 進一步假設我正在寫這個 function, f,帶有一個返回語句: ...

是否有可能故意破壞特定類型的保證復制省略?

[英]Is it possible to intentionally defeat guaranteed copy elision for a particular type?

在 C++17 及更高版本中,保證復制省略意味着可以通過一系列函數返回不可移動對象,一直到最終調用者: struct NonMoveable { NonMoveable() = default; NonMoveable(NonMoveable&&) = delete; }; ...

為什么在使用 std::make_pair 從函數返回一對時,結構化綁定不會發生 RVO?

[英]Why doesn't RVO happen with structured bindings when returning a pair from a function using std::make_pair?

考慮這段代碼,它定義了一個簡單的 struct Test (帶有默認構造函數和復制構造函數)並從函數返回一個std::pair <Test, Test> 。#include <iostream> #include <utility> using namespa ...

臨時生命周期延長與 clang 上的復制省略對象混合

[英]Temporary lifetime extension mixed with copy elision object on clang

我在我的一個項目中遇到了一個問題,它使用聚合類型以相對安全的方式延長臨時對象的生命周期,方法是使包含引用不可復制和不可移動的聚合,但是強制復制/移動省略(C++17)不在乎如果一個對象是可復制的或可移動的。 這一切都很好,因為在我看來,復制/移動不應該真正發生,因為實際上應該只有一個對象。 在我的例 ...

函數參數按值傳遞比按引用傳遞更快?

[英]Function argument pass-by-value faster than pass-by-reference?

我進行了一次采訪,在那里我得到了以下函數聲明: 我建議不要復制向量,而應該使用 const-reference(更不用說 const copy 沒有多大意義),但面試官聲稱編譯器復制省略會處理它。 我當場無法提出任何有力的論據,但今天我做了一些研究。 我實現了以下兩個簡單的示例函數: 從g ...

std::vector 沒有就地構建

[英]std::vector doesn't construct in place

我有這個小測試代碼來顯示 std::vector 對class A執行的各種操作。 我對完成了多少復制操作感到有點失望。 更新: 我忘記了移動構造函數中的noexcept 。 固定的。 不能移動std::initializer列表。 所以我擴展了std::vector並使用模板參數包來移動使用std ...

為什么使用 C++17 禁用 std::atomic 的復制省略不起作用?

[英]Why disabling copy elision for std::atomic doesn't work using C++17?

對於std::atomic復制構造函數被刪除,並且由於復制省略,這應該只用 C++17 和更高版本編譯:std::atomic<int> t_int = 1; 我預計它不會使用-fno-elide-constructors標志進行編譯,但它仍然可以編譯: https://godb ...

這里不應該有一個復制ctor調用嗎? 禁用省略(無命名返回值優化)

[英]Shouldn't there be a copy ctor invocation here? Elision disabled (no named return value optimization)

我認為這是典型的 NRVO 示例。 我正在使用-fno-elide-constructors編譯,我看到調用了以下內容:ctor、move ctor、dtor、dtor。 所以第一個 ctor 調用對應於行Test t; ,移動 ctor 正在構造main中的t2 ,然后從get_test返 ...

隱式調用復制構造函數?

[英]Copy constructor implicitly called?

我有以下 class,其中定義了普通構造函數和復制構造函數。 在主要的 function 中,它按我的預期打印普通構造函數,並且只打印普通構造函數。 但是,如果我將復制構造函數設為 class 的私有成員,編譯器會給出錯誤 從它的外觀來看,它看起來像是調用了復制構造函數,但我沒有看到從中打印出任何 ...

演示移動構造函數的有用性

[英]Demonstrating Move Constructor Usefulness

我試圖證明移動構造函數在消除不必要的復制方面的有用性。 但是,當我在 Release 中運行時,Visual Studio 優化器會忽略副本。 當移動構造函數不可用時不會調用復制構造函數,並且顯然在添加移動構造函數時不會調用移動構造函數。 我可以通過在 Debug 中運行來刪除優化,但這並不能很好 ...

gcc:無效錯誤“使用已刪除函數”(復制構造函數)?

[英]gcc: invalid error "use of deleted function" (copy constructor)?

簡化問題: Output 使用 MSVC 編譯時; 或 gcc / MSVC 和未刪除的復制構造函數變體處於活動狀態(上面已注釋掉): --> 從不使用復制構造函數; MSVC 按原樣成功編譯。 按原樣編譯 gcc(v9.3.0 當前 mingw/msys64 構建): 為什么 gcc ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM