閱讀一些職位上的SO後,如果我理解正確的值返回一個std :: vector的是在初始化OK,沒有多餘的副本將被製作如果我這樣做來自返回值函數的結構成員賦值的額外副本?
std::vector<double> fun()
{
std::vector<double> v;
...
return v;
}
std::vector<double> a = fun();
這就是我目前這樣做,但對於「可讀性」我的代碼的原因,我想寧願在結構向量:
struct MyStruc
{
std::vector<double> v;
...
};
如果我做
MyStruc A;
A.v = fun();
我會是否昂貴?通常我不會在意這一點,但在這裏我知道我的矢量v最終會很大,比如1億個元素。所以我想知道這裏會發生什麼。據我瞭解,由於這是一項任務,因此將不存在副本刪除,但這一舉措(對我來說不是很清楚)呢?在那種情況下,我該如何避免它?謝謝。
我不認爲'A.v = fun();'符合copy elision的條件,因爲它是一個賦值操作符。 (編譯器仍然可以在as-if規則下優化它,儘管我不知道是否有編譯器會這樣做)。但是,'MyStruc A = {func()};'可能符合複製elision的條件。 –
是的,我知道,但我想我的問題並不清楚。我想知道他們是否是另一個便宜的解決方案,因爲作業不包含複製elision。 – Castou