精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

julia中文字幕一区二区99在线| 农村少妇久久久久久久| 欧美综合视频| 欧美喷潮久久久xxxxx| 艳母动漫在线免费观看| 狠狠综合久久av一区二区| 免费永久网站黄欧美| 色悠悠久久久久| 中文字幕av一区二区三区人妻少妇| 中文字幕在线播放网址| www.激情成人| 成人黄色影片在线| 在线观看 中文字幕| av亚洲在线观看| 亚洲成avwww人| 色乱码一区二区三区在线| 免费人成在线观看| 日韩成人一级| 日韩欧美在线一区二区三区| 国产精品亚洲二区在线观看| 亚洲h片在线看| 国产欧美日韩久久| 国产精品久久九九| 亚洲在线免费观看视频| 欧美一级视频| 国内精品久久久久影院 日本资源| 中文字幕在线观看免费高清| 91成人短视频| 欧美一卡2卡3卡4卡| caopor在线视频| 午夜激情在线播放| 亚洲国产精品天堂| 国产成人精品免费看在线播放| 国内精品一区视频| jlzzjlzz亚洲日本少妇| 91免费在线观看网站| 在线观看国产成人| 天堂成人免费av电影一区| 欧美激情二区三区| 国产乱子轮xxx农村| 精品日韩欧美一区| 亚洲欧洲第一视频| 网站免费在线观看| 久久精品国产亚洲5555| 亚洲国产欧美一区二区丝袜黑人| 麻豆传媒在线看| 精品视频一二| 欧美一卡二卡三卡| 中文字幕一二三| 午夜日韩影院| 精品国产成人在线影院| 无码人妻久久一区二区三区蜜桃 | 国产精品成人a在线观看| 亚洲欧美日韩另类| 一道本在线观看| 国产在线日韩精品| 永久免费精品影视网站| 日本人亚洲人jjzzjjz| 精品午夜久久| 中文字幕亚洲国产| 国产大屁股喷水视频在线观看| 日韩电影免费网址| www日韩中文字幕在线看| 亚洲一二三四五六区| 久久久综合色| 美女精品久久久| 国产一级视频在线观看| 亚洲伦理精品| 日韩av电影在线网| 中文字幕av网站| 久久99精品国产.久久久久久| 成人国产精品一区二区| 成人黄色在线观看视频| 99久久免费精品高清特色大片| 久久超碰亚洲| 日韩在线视频在线观看| 欧美性生给视频| 亚洲精品网址| 久久久久久免费精品| 国产精品美女久久久久av爽| 一区二区毛片| 国产精品久久婷婷六月丁香| 国产精品无码免费播放 | 中文字幕99页| 天海翼精品一区二区三区| 亚洲欧美制服综合另类| 91麻豆精品久久毛片一级| 欧美在线网址| 欧美一区视频在线| 一区二区三区黄| 丁香六月久久综合狠狠色| 久久久久久欧美精品色一二三四| av在线播放网站| 亚洲免费观看高清完整版在线观看熊 | 人成网站在线观看| 国产欧美一区二区在线观看| 性欧美18一19内谢| 麻豆视频在线看| 欧美日韩久久久一区| 丰满岳乱妇一区二区| 日韩黄色大片网站| 91成人精品网站| 国产露脸无套对白在线播放| 91麻豆视频网站| 一区二区三区日韩视频| 三级成人黄色影院| 日韩美女在线视频| 东京热无码av男人的天堂| 黄色日韩在线| 国产日韩欧美日韩| 水莓100在线视频| 99成人在线| 国产区精品视频| 亚洲欧美丝袜中文综合| 中文字幕日本不卡| 女人扒开屁股爽桶30分钟| 精品国产鲁一鲁****| 国产亚洲精品久久久| 黄色一级片在线免费观看| 日韩成人伦理电影在线观看| 国产麻豆日韩| 97超碰资源站在线观看| 欧美色涩在线第一页| 亚洲av无码一区二区三区网址| 午夜日韩福利| 91九色蝌蚪国产| yw视频在线观看| 欧美日韩国产精品一区二区不卡中文| 夜夜爽久久精品91| 日韩欧美自拍| 国产精品电影在线观看| 亚洲欧美日韩动漫| 一区二区三区在线视频免费| 国产欧美一区二| 成人在线免费观看网站| 人人爽久久涩噜噜噜网站| 国产综合在线播放| 亚洲一区成人在线| 在线成人免费av| 欧美激情成人| 91精品国产综合久久香蕉的用户体验| 久久久久久久影视| 一本色道久久加勒比精品| 亚洲成人av免费在线观看| 激情综合久久| 国产亚洲欧美一区二区| 麻豆av在线播放| 精品国产乱码久久久久久1区2区| 免费在线看黄网址| 成人亚洲精品久久久久软件| 肉大捧一出免费观看网站在线播放| 外国成人毛片| 伦理中文字幕亚洲| 性欧美8khd高清极品| 一区二区三区欧美久久| 中国特级黄色片| 日韩视频久久| 久久精品成人一区二区三区蜜臀| cao在线视频| 日韩久久精品成人| 亚洲天堂五月天| 国产精品毛片无遮挡高清| 亚洲视频第二页| 亚洲精品a级片| 岛国一区二区三区高清视频| 国产激情在线播放| 亚洲欧美中文字幕在线一区| 日本欧美www| 自拍偷拍国产亚洲| 韩国三级在线看| 性欧美暴力猛交另类hd| 色吧亚洲视频| 精品久久亚洲| 77777少妇光屁股久久一区| 你懂的免费在线观看视频网站| 91国产福利在线| 国产尤物在线播放| 成人精品视频.| 国内外免费激情视频| 日韩电影免费网址| 99热在线播放| 激情开心成人网| 久久综合免费视频影院| 午夜小视频在线播放| 欧美三级视频在线| 久久久久久久久久91| 久久综合999| 日本网站在线看| 在线综合亚洲| 伊甸园精品99久久久久久| 国产suv精品一区二区四区视频| 国产999精品久久久| 成人黄色网址| 亚洲精品少妇网址| av中文在线观看| 色欲综合视频天天天| 欧美黑人性猛交xxx| 久久久久久久久久久电影| www.午夜av| 久久精品一区| 屁屁影院ccyy国产第一页| sdde在线播放一区二区| 成人片在线免费看| 九七影院97影院理论片久久| 午夜精品视频在线| 黄色av电影在线播放| 亚洲乱码一区av黑人高潮| 精品国产无码一区二区| 欧美在线制服丝袜| 久久狠狠高潮亚洲精品| 亚洲欧美怡红院| 精品成人无码一区二区三区| 99精品久久只有精品| 美女被爆操网站| 久久99国内精品| 50路60路老熟妇啪啪| 一区二区激情| 男人的天堂狠狠干| 欧美91大片| 欧洲xxxxx| 色综合咪咪久久网| 日韩aⅴ视频一区二区三区| 免费福利视频一区| av一区和二区| www.成人| 成人免费直播live| 99精品在免费线偷拍| 26uuu国产精品视频| 99爱在线观看| 久久久久久久影院| 欧洲精品二区| 欧美黄色片在线观看| 大片免费在线观看| 日韩视频中文字幕| 亚洲成人影院麻豆| 中文欧美在线视频| 国产精品秘入口| 亚洲欧洲日本专区| 欧美视频综合| 亚洲精品狠狠操| 欧美一区二区黄片| 亚洲第一福利视频| 人妻中文字幕一区| 欧美精品一区二区三区高清aⅴ| www.久久成人| 精品欧美一区二区久久| 亚洲精品免费在线观看视频| 欧美成人官网二区| 空姐吹箫视频大全| 亚洲国产精品推荐| 天堂av一区二区三区| 日韩av在线不卡| 午夜视频在线免费播放| 亚洲人成亚洲人成在线观看| 黄色视屏网站在线免费观看| 国产亚洲欧美日韩精品| 国产精品一区二区婷婷| 在线成人激情视频| 麻豆传媒视频在线观看| 欧美日韩爱爱视频| 91超碰在线| 日本成人免费在线| 91精品店在线| 91亚洲一区精品| 综合激情网...| 久久精品国产99精品国产亚洲性色| 婷婷亚洲精品| 天天综合色天天综合色hd| 亚洲成人精品| 免费不卡av在线| 久久精品道一区二区三区| 国产一线二线三线在线观看| 久久99久久99精品免视看婷婷| 中文字幕久久久久久久| 99久久99久久精品免费看蜜桃| 国产又粗又猛又爽视频| **网站欧美大片在线观看| 久久久久成人精品无码| 大荫蒂欧美视频另类xxxx| 亚洲av人无码激艳猛片服务器| 3d动漫精品啪啪1区2区免费| 黑人乱码一区二区三区av| 亚洲香蕉av在线一区二区三区| 欧美一区二区三区在线观看免费| 欧美大片免费观看在线观看网站推荐| 国产黄大片在线观看| 国产精品羞羞答答| 99亚洲乱人伦aⅴ精品| 欧美一区二区三区电影在线观看| 亚洲国产精品日韩专区av有中文| 自拍日韩亚洲一区在线| 毛片一区二区三区| 妖精视频一区二区| 国产精品久久久久久一区二区三区| 精品无码人妻一区二区三区品| 色一情一乱一乱一91av| www香蕉视频| 国产亚洲精品久久久久动| 久久av色综合| 国产精品视频资源| 麻豆精品99| 青青草影院在线观看| 视频一区视频二区中文| xxxx国产视频| 国产精品网曝门| 久草手机在线观看| 日韩精品一区二区三区四区视频| а天堂8中文最新版在线官网| 隔壁老王国产在线精品| 亚洲男人在线| 色综合影院在线观看| 国产精品久久久久毛片大屁完整版| 人人爽人人爽av| 国产欧美一区二区精品性| 国产无遮无挡120秒| 91精品福利在线一区二区三区 | 综合亚洲色图| 久久99久久99精品| 韩日av一区二区| 国产午夜福利一区| 91成人网在线| 日韩亚洲视频在线观看| 午夜精品久久久久久久久久久久 | 一区二区精品在线观看| 亚洲女人av| 亚洲 欧美 日韩在线| 一区二区三区高清在线| 国产日韩免费视频| 日韩视频免费观看| 精品久久久网| 亚洲乱码国产乱码精品天美传媒| 欧美专区在线| 中文字幕乱码在线| 亚洲大型综合色站| 理论片中文字幕| 欧美极品少妇xxxxⅹ免费视频| 国产精品久一| 大地资源网在线观看免费官网| 国产一区二区三区观看| 91精品少妇一区二区三区蜜桃臀| 欧美三区在线视频| 五月香视频在线观看| 国产精品永久免费视频| 日韩.com| www.亚洲自拍| 亚洲一区二区三区四区在线| 亚洲成人一二三区| 亚洲国产视频网站| 成人午夜高潮视频| 日韩激情毛片| 成人在线观看你懂的| 成人国产免费视频| 国产精品30p| 日韩av综合网| 亚洲高清黄色| 亚洲一区二区三区精品动漫| 蜜臀av一级做a爰片久久| 后入内射无码人妻一区| 欧美高清视频www夜色资源网| 国产在线观看a视频| 亚洲综合日韩在线| 一区视频在线看| 成年人网站免费看| 欧美在线视频日韩| 欧美激情黑人| 波多野结衣久草一区| 伊人久久综合| 亚洲av无码国产精品久久| 在线精品视频小说1| 日韩成人影视| 99久久久精品免费观看国产| 一区二区三区国产盗摄| 国产精品av久久久久久无| 欧美日韩亚洲综合在线| a在线免费观看| 国产综合动作在线观看| 久久久夜精品| 91麻豆精品久久毛片一级| 日韩欧美成人一区| 欧产日产国产精品视频| 色就是色欧美| 国产传媒日韩欧美成人| 亚洲伊人成人网| 神马国产精品影院av| 香蕉成人app| 虎白女粉嫩尤物福利视频| 中文字幕一区二区三| 人成网站在线观看| 国产免费亚洲高清| 精品二区视频| 亚洲欧美日韩第一页| 欧美不卡一区二区三区四区| 美女福利一区二区| 日本成人性视频| 久久网站最新地址| 国产视频手机在线| 国产91色在线免费| 中文字幕人成人乱码| 丰腴饱满的极品熟妇| 欧美变态tickling挠脚心|