精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Visual Studio:優化了復制/移動省略

開發 前端
當 C++ 函數中的 return 關鍵字后跟非內置類型的表達式時,執行該 return 語句會將表達式的結果復制到調用函數的返回槽(Return Slot)中。為此,將調用非內置類型的復制或移動構造函數。然后,作為退出函數的一部分,將調用函數局部變量的析構函數,可能包括 return 關鍵字后面的表達式中命名的任何變量。

蝎子

為了能發文,標題中的復制/移動省略是 Copy/Move Elision 的硬翻譯,請各位大大海涵。下文中我會同時使用這兩種術語。

Visual Studio 中 Copy/Move Elision 的變化

在 Visual Studio 2022 版本 17.4 預覽版 3 中,我們顯著增加了適用于Copy/Move Elision 情況的數量,并讓用戶能夠更好地控制是否啟用這些轉換。

Copy/Move Elision 是什么?

當 C++ 函數中的 return 關鍵字后跟非內置類型的表達式時,執行該 return 語句會將表達式的結果復制到調用函數的返回槽(Return Slot)中。為此,將調用非內置類型的復制或移動構造函數。然后,作為退出函數的一部分,將調用函數局部變量的析構函數,可能包括 return 關鍵字后面的表達式中命名的任何變量。

C++ 規范允許編譯器直接在調用函數的返回槽中構造返回的對象,從而省略作為返回的一部分執行的復制或移動構造函數。與大多數其他優化不同,這種轉換允許對程序的輸出產生可觀察的影響 – 即復制或移動構造函數以及關聯的析構函數可以少調用一次。

Visual Studio 中的 Copy/Move Elision

C++ 標準要求在將返回值初始化為 return 語句的一部分時(例如,當返回類型為 Foo 的函數返回返回 Foo()時),編譯器需要執行 Copy/Move Elision。Microsoft Visual C++ 編譯器始終根據需要對返回語句執行 Copy/Move Elision,而不管傳遞給編譯器的標志如何。此行為保持不變。

在 Visual Studio 17.4 預覽版 3 中對可選 Copy/Move Elision 的更改

當返回的值為命名變量時,編譯器可能會省略復制或移動,但不是必需的。C++ 標準仍要求為命名的返回變量定義復制或移動構造函數,即使編譯器在所有情況下都省略了構造函數。在 Visual Studio 2022 版本 17.4 預覽版 3 之前,當禁用優化(例如使用 /Od 編譯器標志或使用了 #pragma optimize(“”,off))時,編譯器將僅執行強制Copy/Move Elision。使用 /O2 標志,編譯器將通過簡單的控制流為優化的函數執行可選的Copy/Move Elision。

從 Visual Studio 2022 版本 17.4 預覽版 3 開始,我們為開發人員提供了與新的 /Zc:nrvo 編譯器標志保持一致的選項。默認情況下,當使用 /O2 標志、/permissive- 編譯代碼時,或者在為 /std:c++20 或更高版本進行編譯時,將傳遞 /Zc:nrvo 標志。通過此標志后,將盡可能執行復制和移動省略。我們希望在將來的版本中默認啟用 /Zc:nrvo。另外,開發者還可以使用 /Zc:nrvo- 標志顯式禁用可選的Copy/Move Elision。請注意,無法禁用強制型的Copy/Move Elision。

在 Visual Studio 2022 版本 17.4 預覽版 3 中,當使用 /Zc:nrvo、/O2、/permissive-或 /std:c++20 或更高版本的標志啟用可選復制/移動省略時,我們還增加了Copy/Move Elision的位置。

可選 Copy/Move Elision 的示例

可選 Copy/Move Elision 的最簡單示例是以下函數:Foo SimpleReturn() {Foo result;return result;}

在這種情況下,如果傳遞了 /O2 標志,則早期版本的 MSVC 編譯器已將結果的復制或移動到返回槽中。在 Visual Studio 2022 版本 17.4 預覽版 3 中,如果傳遞了 /permissive-、/std:c++20 或更高版本或 /Zc:nrvo 標志,也會省略復制或移動,如果傳遞了 /Zc:nrvo- 標志,則保留復制或移動。

從 Visual Studio 2022 版本 17.4 預覽版 3 開始,如果將 /O2、/permissive-、/std:c++20 或更高版本或 /Zc:nrvo 標志傳遞給編譯器,而 /Zc:nrvo- 標志未傳遞到編譯器,我們現在在以下其他情況下執行復制/移動省略。

在循環中返回

Foo ReturnInALoop(int iterations) {for (int i = 0; i < iterations; ++i) {Foo result;if (i == (iterations / 2)) {return result;}}}結果對象將在循環的每次迭代開始時正確構造,并在每次迭代結束時銷毀。在返回結果的迭代中,退出函數時不會調用其析構函數。當返回的對象超出該函數的范圍時,函數的調用方將銷毀該對象。

在異常處理中返回

Foo ReturnInTryCatch() {
try {
Foo result;
return result;
} catch () {}
}

如果傳遞了 /O2、/permissive-、/std:c++20 或更高版本,或者傳遞了 /Zc:nrvo 標志,而 /Zc:nrvo- 標志未傳遞,則結果對象的復制或移動現在將被省略。我們現在還可以妥善處理更復雜的情況,例如:

int n;

void throwFirstThreeIterations() {
++n;
if (n <= 3) throw n;
}

Foo ComplexTryCatch()
{
Label1:
Foo result;

try {
throwFirstThreeIterations();
return result;
}
catch() {
goto Label1;
}
}

結果對象將在調用方函數的返回槽中構造,并且在成功返回時不會為其調用復制/移動構造函數或析構函數。引發異常時,是否析構結果對象取決于向編譯器傳遞哪些異常處理標志。默認情況下,不會發生堆棧展開,因此不會調用析構函數。但是,如果使用 /EHs、/EHa 或 /EHr 標志啟用了堆棧展開異常處理,則 goto Label1 將導致調用結果的析構函數,因為它跳轉到初始化結果之前。無論哪種方式,當再次到達表達式 Foo 結果時,將在返回槽中再次構造對象。

復制具有默認參數的構造函數

現在,我們可以正確檢測到具有默認參數的復制或移動構造函數仍然是復制或移動構造函數,因此可以在上述情況下被省略。具有默認參數的復制構造函數如下所示:structStructWithCopyConstructorDefaultParam {int X;

struct
StructWithCopyConstructorDefaultParam {
int X;

StructWithCopyConstructorDefaultParam(int x) : X(x) {}
StructWithCopyConstructorDefaultParam(StructWithCopyConstructorDefaultParam const& original, int defaultParam = 0) :
X(original.X + defaultParam) {
printf(“Copy constructor called.\n”);
}
};

對NRVO的限制

盡管 MSVC 編譯器現在在更多情況下執行Copy/Move Elision,但并不總是能夠執行它。若要了解為什么會這樣,請考慮以下函數:

Foo WhichShouldIReturn(bool condition) {
Foo resultA;
if (condition) {
Foo resultB;
return resultB;
}
return resultA;
}

復制省略構造要在返回槽中返回的對象,但在這種情況下,應在返回槽中構造哪個對象?為了在返回結果A時省略結果A的副本,必須在返回槽中構造它。但是,如果條件為真,則需要在銷毀結果 A 之前在返回槽中構造結果 B。無法對兩個路徑執行復制省略。

我們目前選擇避免在函數中的所有路徑上執行可選的Copy/Move Elision,如果在任何路徑上它是不可能的的話。但是,對內聯決策、死代碼消除和其他優化的更改可能會更改Copy/Move Elision的可能性。因此,編寫依賴于命名變量的Copy/Move Elision的某些行為的代碼是不安全的,除非使用 /Zc:nrvo- 禁用了所有可選的Copy/Move Elision。

只要啟用了堆棧展開異常處理或未引發異常,仍然可以安全地假定每個構造函數調用都有匹配的析構函數調用。

總結

寫著舊時代的 C++,一直都為如何高性能地返回一個對象發愁。沒錯,正是在下。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2013-05-17 09:31:53

Windows AzuOffice 365Visual Stud

2009-05-11 09:45:23

Visual Stud復制代碼ID

2021-10-20 10:12:19

開發Visual Stud圖標

2009-06-23 10:36:32

移動開發isual Studi

2013-11-14 01:09:35

微軟Visual StudVisual Stud

2023-09-05 07:32:22

vscode開源故障

2019-09-19 08:00:00

Visual StudVisual Stud編程語言

2009-12-02 09:43:38

Visual Stud

2024-02-27 12:42:38

開發前端

2009-11-23 15:41:44

Visual Stud

2009-11-23 17:12:20

Visual Stud

2009-11-10 10:24:28

Visual Stud

2009-11-10 13:43:37

Visual Stud

2020-08-12 09:53:18

代碼開發工具

2019-08-13 09:30:50

編程C++后端

2009-11-06 13:54:09

Visual Stud

2012-05-02 14:22:35

Visual Stud

2009-11-12 10:37:23

Visual Stud

2009-11-06 16:36:37

Visual Stud

2009-11-13 10:12:37

Visual Stud
點贊
收藏

51CTO技術棧公眾號

大片免费播放在线视频| 国产午夜视频在线播放| 99视频这里有精品| 亚洲精品你懂的| 91超碰在线电影| 日本高清不卡码| 一区二区三区在线| 亚洲美女av电影| 中文字幕一区二区三区四| 国模私拍一区二区国模曼安| 亚洲国产精品精华液2区45| 大波视频国产精品久久| 影音先锋国产资源| 国产农村妇女精品一区二区| www.国产一区| 少妇特黄一区二区三区| 日本高清精品| 欧美日韩免费观看一区二区三区| 日韩av新片网| a在线免费观看| 久久女同性恋中文字幕| 国产精品视频免费一区| 97超碰人人草| 日韩经典一区二区| 欧美一区二三区| 久操免费在线视频| 久久亚洲在线| 国产一区二区三区三区在线观看| 精品一区二区视频在线观看| 激情久久免费视频| 欧美日韩在线亚洲一区蜜芽| 超碰网在线观看| 91九色国产在线播放| 亚洲精选在线视频| 在线观看日韩羞羞视频| 久久经典视频| 久久综合久久99| 狠狠色伊人亚洲综合网站色| 精品久久人妻av中文字幕| 久久av资源站| 成人午夜激情网| 一级片免费网站| 久久精品国产精品青草| 国产精品丝袜久久久久久高清 | 国产精品丝袜一区二区三区| 无码人妻av免费一区二区三区| 亚洲第一黄网| 97国产真实伦对白精彩视频8| 青青草成人免费| 欧美成人中文| 精品中文字幕在线2019| 欧美色图亚洲天堂| 国产精品theporn| 欧美高清一级大片| 精品少妇爆乳无码av无码专区| 91精品99| 欧美极品少妇全裸体| 久久精品波多野结衣| 在线欧美福利| 2020国产精品视频| 国产午夜无码视频在线观看 | 国产福利精品av综合导导航| 日本视频在线观看免费| 爽好久久久欧美精品| 国产精品久久久久国产a级| 亚洲av人无码激艳猛片服务器| 日韩高清一区在线| 成人黄色免费网站在线观看| 国产精品久久久久久久久久久久久久久久 | 国产精品麻豆一区二区三区| 国产精品视频看| 色哺乳xxxxhd奶水米仓惠香| 七七成人影院| 欧美午夜美女看片| 日本人视频jizz页码69| 日韩精品一级| 亚洲欧美日韩图片| 亚洲一级理论片| 韩国一区二区三区在线观看| 91精品国产免费久久久久久 | 欧美一区二区三区免费| 深田咏美中文字幕| 国产欧美日韩精品一区二区免费| 色天天综合狠狠色| 精品少妇久久久| 巨乳诱惑日韩免费av| 成人乱人伦精品视频在线观看| 午夜精品小视频| 久久久精品一品道一区| 午夜在线视频免费观看| av在线播放资源| 欧美三电影在线| 日本不卡视频一区| 日韩免费看片| 久久男人资源视频| 91黄色在线视频| 97久久超碰国产精品| 正在播放91九色| 蜜桃视频m3u8在线观看| 7777精品伊人久久久大香线蕉| 国产大学生视频| 久久福利影院| 国产成人精品国内自产拍免费看| 国产人妖一区二区三区| 国产无人区一区二区三区| 欧美日韩午夜爽爽| jizz久久久久久| 亚洲激情在线观看| 欧美卡一卡二卡三| 久久精品999| 日本免费高清不卡| 99在线视频影院| 日韩一区二区三区在线视频| 色欲AV无码精品一区二区久久| 99国产精品久久久久久久| 91欧美激情另类亚洲| 国产视频三级在线观看播放| 欧美日韩国产一区在线| 五月天婷婷在线观看视频| 国产中文精品久高清在线不| 97国产精品视频| 亚洲爱爱综合网| 1区2区3区国产精品| 免费日韩中文字幕| 日韩欧美黄色| 午夜免费日韩视频| 日本免费不卡视频| 一区二区三区免费| 操人视频免费看| 91不卡在线观看| 国产日韩在线一区| 一区二区三区视频在线观看视频| 欧美三级xxx| 在线观看av中文字幕| 精品成人在线| 国内精品久久久久久久果冻传媒| 日本在线观看大片免费视频| 日韩三级在线免费观看| 高h视频免费观看| 国产在线精品一区二区| 中文字幕日韩一区二区三区| 久久不卡日韩美女| 色偷偷88888欧美精品久久久| 中文字幕免费高清网站| 国产女人水真多18毛片18精品视频| www黄色av| 精品国产aⅴ| 国产精品久久久久久久9999| 成人午夜影视| 欧美日韩高清影院| 熟女少妇a性色生活片毛片| 久久国产精品99精品国产| 在线成人av电影| 99精品女人在线观看免费视频| 久久手机精品视频| 亚洲精品久久久久avwww潮水| 亚洲一区二区精品久久av| 亚洲少妇18p| 久久精品综合| 视频一区视频二区视频三区高| 亚洲一区二区三区四区| 中国china体内裑精亚洲片| 一二三四区在线| 一区二区三区中文字幕在线观看| 26uuu国产| 国产精品久久久久久久免费软件| 欧美自拍资源在线| 国产一区二区三区四区五区3d | 亚洲一区二区三区午夜| www.久久久久爱免| 国产综合在线视频| 黄色大片在线免费观看| 欧美人与性动xxxx| 久久黄色小视频| 久久午夜羞羞影院免费观看| 男操女免费网站| 欧美涩涩网站| 免费观看成人高| 二区三区精品| 欧美一级大片视频| 麻豆av在线免费看| 亚洲精品720p| 中文字幕在线2019| 亚洲一级片在线观看| 扒开jk护士狂揉免费| 狠狠色综合色综合网络| 成人毛片一区二区| 久久视频精品| 久久久久久99| 国产日韩一区二区三免费高清| 97免费中文视频在线观看| 日本在线免费| 国产视频亚洲视频| 国产日本精品视频| 在线视频国内自拍亚洲视频| 校园春色 亚洲| 国产欧美精品日韩区二区麻豆天美| 亚洲欧美日韩中文字幕在线观看| 模特精品在线| 成人免费看片'免费看| 精品午夜久久| 国产日产精品一区二区三区四区| 九九久久国产| 日韩免费av一区二区| 91福利在线免费| 在线观看日韩视频| 天堂在线中文字幕| 精品三级av在线| 99在线小视频| 欧美在线视频日韩| 国产精品一区无码| 亚洲va欧美va国产va天堂影院| 蜜桃av.com| 中文字幕不卡在线观看| 极品人妻一区二区三区| www.欧美色图| 国产艳妇疯狂做爰视频 | 91亚洲精品丁香在线观看| 国产精品高清乱码在线观看 | yy6080久久伦理一区二区| 97超视频免费观看| а√在线中文在线新版| 九九热最新视频//这里只有精品| 欧洲不卡av| 在线成人激情黄色| 激情福利在线| 亚洲欧美制服丝袜| 视频二区在线| 亚洲精选在线观看| 日本成人一区| 亚洲精品视频二区| 九色在线视频蝌蚪| 亚洲精品视频免费| 国产资源在线播放| 亚洲视频axxx| 福利视频在线播放| 中文字幕亚洲欧美| 一级毛片视频在线观看| 在线视频国产日韩| av色图一区| 中文字幕精品久久久久| av在线免费播放网站| 一区二区三区视频观看| aaa日本高清在线播放免费观看| 亚洲人在线观看| 精品乱码一区二区三四区视频| 亚洲人成电影网站色…| 国产日本在线观看| 色偷偷av一区二区三区乱| 91精品大全| 精品国产一区二区三区四区在线观看 | 麻豆成人免费视频| 色婷婷久久一区二区三区麻豆| 看黄色一级大片| 欧美视频一区二区| 国产精品嫩草影院精东| 欧美一级一区二区| 国产综合无码一区二区色蜜蜜| 亚洲电影中文字幕| 免费在线毛片| 中文字幕日本精品| 最新国产在线拍揄自揄视频| 久久久久久这里只有精品| 国产三级电影在线播放| 奇米4444一区二区三区| 日韩伦理一区二区| 福利视频一区二区三区| 农村少妇一区二区三区四区五区 | 亚洲国产日韩一区无码精品久久久| 久久久久久久久久美女| 永久免费观看片现看| 亚洲免费观看视频| 91久久国产视频| 欧洲视频一区二区| aaa一区二区三区| 亚洲剧情一区二区| 久久五月精品| 97超级碰碰人国产在线观看| 成人四虎影院| 99一区二区三区| 欧美猛男男男激情videos| 在线观看成人一级片| 9色国产精品| 狠狠躁狠狠躁视频专区| www.亚洲在线| 五月天色婷婷丁香| 性做久久久久久免费观看| 做爰视频毛片视频| 亚洲成人黄色网址| 日本最新在线视频| 97超碰色婷婷| 麻豆精品久久| 欧美另类网站| 国产精品theporn| 色片在线免费观看| 波多野洁衣一区| 肉色超薄丝袜脚交69xx图片| 欧美日韩国产丝袜美女| 国产乱色精品成人免费视频| 亚洲欧美日韩国产中文专区| 午夜激情在线| 国产精品主播视频| 制服丝袜日韩| 欧美一级片免费播放| 麻豆视频一区二区| www.久久国产| 亚洲一二三四在线观看| 一区二区日韩视频| 亚洲免费高清视频| heyzo高清在线| 亚洲自拍偷拍福利| 日韩精品欧美| 日韩手机在线观看视频| av亚洲精华国产精华精| 五月天丁香激情| 欧美日韩极品在线观看一区| 青青草手机在线| 高清欧美性猛交xxxx| 国产精区一区二区| 综合色婷婷一区二区亚洲欧美国产| 欧美亚洲三区| 屁屁影院国产第一页| 一区二区三区久久久| 97人妻人人澡人人爽人人精品| 一个色综合导航| 芒果视频成人app| 精品午夜一区二区三区| 亚洲国产精品一区| 波多野结衣一二三区| 亚洲精品日产精品乱码不卡| 国产有码在线观看| 久久精品久久精品亚洲人| 欧美jizz18| 亚洲午夜精品一区二区| 免费成人av资源网| gv天堂gv无码男同在线观看| 91精品福利视频| 国产69精品久久app免费版| 欧洲成人午夜免费大片| 亚洲香蕉视频| 午夜dv内射一区二区| 久久久精品国产99久久精品芒果| 欧美亚洲精品天堂| 亚洲理论在线a中文字幕| 中文字幕乱码中文乱码51精品| 久久久99爱| 性感少妇一区| 亚洲人成人无码网www国产| 色哦色哦哦色天天综合| 国产无套粉嫩白浆在线2022年| 国产精品久久久久91| 97精品视频在线看| 午夜免费视频网站| 亚洲国产aⅴ天堂久久| 污污网站免费在线观看| 91禁外国网站| av永久不卡| 国内自拍第二页| 亚洲尤物在线视频观看| 天天色综合av| 国产精品精品视频一区二区三区| 色天天综合网| 久久精品综合视频| 国产精品一区二区男女羞羞无遮挡 | 美女在线免费视频| 国产成人精品aa毛片| 日韩黄色a级片| 亚洲午夜未删减在线观看| 懂色aⅴ精品一区二区三区| 在线免费观看成人网| 国产不卡视频在线播放| 成人免费a视频| 上原亚衣av一区二区三区| 亚洲一区二区三区在线免费| 青青草原成人网| 国产精品传媒在线| 亚洲av永久纯肉无码精品动漫| 欧美怡红院视频一区二区三区| 第一sis亚洲原创| 91精品人妻一区二区三区四区| 欧美日韩精品在线观看| 欧美尤物美女在线| 国产一区二区高清视频| 视频一区视频二区中文| 亚洲欧美精品aaaaaa片| 日韩精品在线影院| 一区二区三区日本视频| 免费av观看网址| 中文字幕一区二区三区四区不卡| 成人午夜福利视频| 国产成人综合av| 激情国产一区| 亚洲色图 激情小说| 精品99一区二区| 色8久久久久| 日韩精品无码一区二区三区免费| 亚洲欧美日本在线| 国产在线网站| 精品国产二区在线| 国内精品视频一区二区三区八戒|