Copy elision
சி + + கணினி நிரலாக்கத்தில், நகல் நீக்குதல் என்பது ஒரு தொகுப்பு உகப்பாக்கம் நுட்பத்தைக் குறிக்கிறது, இது பொருட்களின் தேவையற்ற நகலெடுப்பை நீக்குகிறது. சி + + மொழி தரநிலை பொதுவாக எந்தவொரு உகப்பாக்கத்தையும் செய்ய செயல்படுத்தல்களை அனுமதிக்கிறது, இதன் விளைவாக நிரலின் கவனிக்கக்கூடிய நடத்தை ஒரே மாதிரியாக இருந்தால், அதாவது. பாசாங்கு செய்து, திட்டம் தரநிலையால் கட்டளையிடப்பட்டபடி சரியாக செயல்படுத்தப்பட்டது. அதற்கு அப்பால், இது நிரலின் நடத்தையை மாற்றியிருந்தாலும் நகலெடுப்பது அகற்றப்படக்கூடிய சில சூழ்நிலைகளையும் தரநிலை விவரிக்கிறது, மிகவும் பொதுவானது வருவாய் மதிப்பு உகப்பாக்கம் (கீழே காண்க). சி + + தரத்தில் விவரிக்கப்பட்டுள்ள மற்றொரு பரவலாக செயல்படுத்தப்பட்ட உகப்பாக்கம், வகுப்பு வகையின் ஒரு தற்காலிக பொருள் அதே வகையின் ஒரு பொருளுக்கு நகலெடுக்கப்படும் போது ஆகும். இதன் விளைவாக, நகல்-துவக்கம் பொதுவாக செயல்திறனைப் பொறுத்தவரை நேரடி-துவக்கத்திற்கு சமம், ஆனால் சொற்பொருள்களில் அல்ல; நகல்-துவக்கத்திற்கு இன்னும் அணுகக்கூடிய நகல் கட்டமைப்பாளர் தேவைப்படுகிறது. ஒரு குறிப்புடன் பிணைக்கப்பட்டுள்ள ஒரு தற்காலிக பொருளுக்கு உகப்பாக்கம் பயன்படுத்தப்பட முடியாது. எடுத்துக்காட்டு #include <ஐயோஸ்ட்ரீம்> இன்ட் என் = 0; கட்டமைப்பு சி {வெளிப்படையான சி (இன்ட்) {} சி (கான்ஸ்ட் சி &) {+ + என்;}/நகல் கட்டமைப்பாளர் ஒரு புலப்படும் பக்க விளைவைக் கொண்டுள்ளது};// இது நிலையான சேமிப்பு காலத்துடன் ஒரு பொருளை மாற்றியமைக்கிறது இன்ட் மைன் () {சி சி சி 1 (42);// நேரடி-துவக்கம், சி அழைக்கிறதுஃ சி (இன்ட்) சி சி 2 = சி (42);// நகல்-துவக்கம், சி அழைக்கிறதுஃ சி (கான்ஸ்ட் சி &) ஸ்டாண்ட்ஃஃ: காட் <<என் <ஸ்டாண்ட்ஃ எண்டில்;// அச்சிடுகிறது 0 நகல் நீக்கப்பட்டால், இல்லையெனில் 1] இந்த உகப்பாக்கம் தற்காலிக பொருள்களுக்கு மட்டுமே பொருந்துமா அல்லது பெயரிடப்பட்ட பொருட்களுக்கும் பொருந்துமா என்பதும் தெளிவாகத் தெரியவில்லை. பின்வரும் மூலக் குறியீட்டைக் கொடுத்தால்ஃ #include <ஐயோஸ்ட்ரீம்> கட்டமைப்பு C {C () = முன்னிருப்பு; C (கான்ஸ்ட் C &) {std:: cout <<"ஹலோ வேர்ல்ட்! \n";}; வெற்றிடமான f () {Cc; த்ரோ c;// பெயரிடப்பட்ட பொருளை c ஐ விதிவிலக்கான பொருளுக்குள் நகலெடுப்பது. //இந்த நகல் நீக்கப்பட்டதா (தவிர்க்கப்பட்டதா) என்பது தெளிவாகத் தெரியவில்லை. இன்ட் மைன் () {முயற்சி {f ();} பிடி (சி சி) {// விதிவிலக்கு பொருளை// விதிவிலக்கு அறிவிப்பில் தற்காலிகமாக நகலெடுப்பது. //இந்த நகல் நீக்கப்பட்டதா (தவிர்க்கப்பட்டதா) என்பதும் தெளிவாகத் தெரியவில்லை. எனவே ஒரு இணக்கமான தொகுப்பாளர் "ஹலோ வேர்ல்ட்!" ஐ அச்சிடும் ஒரு நிரலை உருவாக்க வேண்டும். இரண்டு முறை. சி + + தரநிலையின் (சி + + 11) தற்போதைய திருத்தத்தில், சிக்கல்கள் தீர்க்கப்பட்டுள்ளன, அடிப்படையில் பெயரிடப்பட்ட பொருளிலிருந்து விதிவிலக்கு பொருளுக்கு நகல் மற்றும் விதிவிலக்கு கையாளியில் அறிவிக்கப்பட்ட பொருளின் நகல் ஆகிய இரண்டையும் அனுமதிக்கிறது. நகல்-நீக்குதலை முடக்குவதற்கு ஜி. சி. சி-ஃப்னோ-எலைடு-கட்டமைப்பாளர்கள் விருப்பத்தை வழங்குகிறது. திரும்ப மதிப்பு உகப்பாக்கம் அல்லது நகல்கள் அழிக்கப்படும் பிற உகப்பாக்கங்களின் விளைவுகளைக் கவனிக்க (அல்லது கவனிக்காமல்) இந்த விருப்பம் பயனுள்ளதாக இருக்கும். இந்த முக்கியமான உகப்பாக்கத்தை முடக்குவது பொதுவாக பரிந்துரைக்கப்படுவதில்லை. திரும்ப மதிப்பு உகப்பாக்கம் சி + + நிரலாக்க மொழியின் சூழலில், திரும்ப மதிப்பு உகப்பாக்கம் (ஆர். வி. ஓ) என்பது ஒரு தொகுப்பு உகப்பாக்கம் ஆகும், இது ஒரு செயல்பாட்டின் திரும்ப மதிப்பை வைத்திருக்க உருவாக்கப்பட்ட தற்காலிக பொருளை அகற்றுவதை உள்ளடக்கியது. இதன் விளைவாக வரும் நிரலின் கவனிக்கக்கூடிய நடத்தையை சி + + தரநிலையால் மாற்ற ஆர். வி. ஓ அனுமதிக்கப்படுகிறது. சுருக்கமாக பொதுவாக, சி + + தரநிலை ஒரு தொகுப்பாளரை எந்தவொரு உகப்பாக்கத்தையும் செய்ய அனுமதிக்கிறது, இதன் விளைவாக செயல்படுத்தக்கூடிய அதே கவனிக்கக்கூடிய நடத்தையை வெளிப்படுத்துகிறது (அதாவது. பாசாங்கு) தரத்தின் அனைத்து தேவைகளும் பூர்த்தி செய்யப்பட்டுள்ளன. இது பொதுவாக "ஆஸ்-இஃப் விதி" என்று குறிப்பிடப்படுகிறது. ரிட்டர்ன் வேல்யூ ஆப்டிமைசேஷன் என்ற சொல் சி + + தரத்தில் உள்ள ஒரு சிறப்பு உட்பிரிவைக் குறிக்கிறது, இது "இருந்தால்" விதியை விட மேலும் செல்கிறதுஃ ஒரு செயல்படுத்தல் ஒரு ரிட்டர்ன் அறிக்கையின் விளைவாக ஒரு நகல் செயல்பாட்டைத் தவிர்க்கலாம், நகல் கட்டமைப்பாளர் பக்க விளைவுகளைக் கொண்டிருந்தாலும் கூட. நகல் கட்டமைப்பாளர் ஒரு புலப்படும் பக்க விளைவைக் கொண்டிருந்தாலும் (அச்சிடும் உரை), செயல்படுத்தல் ஒன்று அல்லது இரண்டு பிரதிகளையும் அகற்றக்கூடிய ஒரு சூழ்நிலையை பின்வரும் எடுத்துக்காட்டு நிரூபிக்கிறது. அகற்றப்படக்கூடிய முதல் நகல், ஒரு பெயரற்ற தற்காலிக சி ஐ f இன் திரும்ப மதிப்பின் செயல்பாட்டில் நகலெடுக்க முடியும். அகற்றப்படக்கூடிய இரண்டாவது நகல் f ஆல் திருப்பி அனுப்பப்பட்ட தற்காலிக பொருளின் நகல் ஆகும். #include <ஐயோஸ்ட்ரீம்> கட்டமைப்பு சி {சி () = இயல்புநிலை; சி (கான்ஸ்ட் சி &) {எஸ்டிடிஃஃ கவுட் <<"ஒரு நகல் செய்யப்பட்டது. \ன்";}}; சி எஃப் () {ரிட்டர்ன் சி ();} இன்ட் மைன் () {எஸ்டிடிஃஃ கவுட் <<"ஹலோ வேர்ல்ட்! \ன்"; சி ஒபிஜே = எஃப் ();} தொகுப்பாளரைப் பொறுத்து, அந்த தொகுப்பாளரின் அமைப்புகளைப் பொறுத்து, இதன் விளைவாக வரும் நிரல் பின்வரும் வெளியீடுகளில் ஏதேனும் ஒன்றைக் காட்டலாம்ஃ ஹலோ வேர்ல்ட்! ஒரு நகல் தயாரிக்கப்பட்டது. ஒரு நகல் தயாரிக்கப்பட்டது. வணக்கம் உலகம்! ஒரு நகல் தயாரிக்கப்பட்டது. வணக்கம் உலகம்! பின்னணி ஒரு செயல்பாட்டிலிருந்து உள்ளமைக்கப்பட்ட வகையின் பொருளைத் திருப்பித் தருவது பொதுவாக CPU பதிவேட்டில் பொருந்துவதால், மேல்நிலை குறைவாகவோ அல்லது குறைவாகவோ இருக்கும். வகுப்பு வகையின் ஒரு பெரிய பொருளைத் திருப்பித் தருவதற்கு ஒரு நினைவக இருப்பிடத்திலிருந்து இன்னொரு இடத்திற்கு நகலெடுப்பது மிகவும் விலை உயர்ந்ததாக இருக்கலாம். இதைத் தவிர்க்க, ஒரு செயல்படுத்தல் அழைப்பாளரின் அடுக்கு சட்டகத்தில் ஒரு மறைக்கப்பட்ட பொருளை உருவாக்கி, இந்த பொருளின் முகவரியை செயல்பாட்டிற்கு அனுப்பலாம். செயல்பாட்டின் திரும்பும் மதிப்பு பின்னர் மறைக்கப்பட்ட பொருளில் நகலெடுக்கப்படுகிறது. எனவே, இது போன்ற குறியீடுஃ கட்டமைப்பு தரவு {சார் பைட்டுகள் [16];}; தரவு எஃப் () {தரவு முடிவு = {};// விளைவு திரும்பும் முடிவை உருவாக்குகிறது;} இன்ட் மைன் () {தரவு டி = எஃப் ();} இதற்கு சமமான குறியீட்டை உருவாக்கலாம்ஃ கட்டமைப்பு தரவு {சார் பைட்டுகள் [16];}; தரவு * எஃப் (தரவு * _ மறைக்கப்பட்ட முகவரி) {தரவு முடிவு = {};// மறைக்கப்பட்ட பொருளுக்குள் முடிவை நகலெடுக்கவும் * _ மறைக்கப்பட்ட முகவரி = முடிவு; திரும்ப _ மறைக்கப்பட்ட முகவரி;} இன்ட் மெயின் () {தரவு _ மறைக்கப்பட்ட;/மறைக்கப்பட்ட பொருளை உருவாக்கவும் தரவு டி = * எஃப் (& _ மறைக்கப்பட்ட);// முடிவை டி இல் நகலெடுக்கவும் இது தரவு பொருளை இரண்டு முறை நகலெடுக்க காரணமாகிறது. சி + + இன் பரிணாம வளர்ச்சியின் ஆரம்ப கட்டங்களில், ஒரு செயல்பாட்டிலிருந்து வகுப்பு வகை பொருளை திறம்பட திருப்பித் தர மொழியின் இயலாமை ஒரு பலவீனமாக கருதப்பட்டது. 1991 ஆம் ஆண்டில், வால்டர் பிரைட் நகலெடுப்பதைக் குறைப்பதற்கான ஒரு நுட்பத்தை செயல்படுத்தினார், மறைக்கப்பட்ட பொருள் மற்றும் செயல்பாட்டிற்குள் பெயரிடப்பட்ட பொருளை முடிவுகளை வைத்திருக்கப் பயன்படுத்தப்படும் பொருளுடன் திறம்பட மாற்றினார்ஃ கட்டமைப்பு தரவு {கரி பைட்டுகள் [16];}; வெற்றிட எஃப் (தரவு * பி) {// நேரடியாக * பி} இன்ட் மெயின் () {தரவு டி; எஃப் (& டி);} பிரைட் தனது ஜோர்டெக் சி + + தொகுப்பில் இந்த உகப்பாக்கத்தை செயல்படுத்தினார். இந்த குறிப்பிட்ட நுட்பம் பின்னர் "ரிட்டர்ன் வேல்யூ ஆப்டிமைசேஷன்" (என். ஆர். வி. ஓ) என்று பெயரிடப்பட்டது, இது பெயரிடப்பட்ட பொருளின் நகல் அகற்றப்படுவதைக் குறிக்கிறது. கம்பைலர் ஆதரவு பெரும்பாலான கம்பைலர்களில் ரிட்டர்ன் மதிப்பு உகப்பாக்கம் ஆதரிக்கப்படுகிறது. இருப்பினும், தொகுப்பாளரால் உகப்பாக்கத்தை செய்ய முடியாத சூழ்நிலைகள் இருக்கலாம். ஒரு பொதுவான வழக்கு என்னவென்றால், ஒரு செயல்பாடு செயல்படுத்தும் பாதையைப் பொறுத்து வெவ்வேறு பெயரிடப்பட்ட பொருள்களைத் திருப்பித் தரலாம்ஃ #include <சரம்> std:: சரம் F (பூல் காண்ட் = தவறானது) {std:: சரம் முதலில் ("முதல்"); std:: சரம் இரண்டாவது ("இரண்டாவது");// செயல்பாடு அதன் வாதத்தைப் பொறுத்து பெயரிடப்பட்ட இரண்டு பொருள்களில் ஒன்றைத் திருப்பித் தரலாம். ஆர். வி. ஓ பயன்படுத்தப்படாமல் போகலாம்? முதலாவதாகஃ இரண்டாவது;} int பிரதான () {std:: சரம் முடிவு = F ();} வெளிப்புற இணைப்புகள் cppreference.com குறிப்புகள் கட்டுரைகளில் உள்ள நீக்குதலை நகலெடுக்கவும் எடுத்துக்காட்டாக C + + குறியீடு தொகுப்பு உகப்பாக்கம் C + +