حذف رونوشت
در برنامه‌نویسی زبان c++، تکنیک حذف رونوشت یک تکنیک بهینه‌سازی کامپایلر است که رونوشت‌های اضافی اشیا را پاک می‌کند. استاندارد زبان c++ به صورت کلی اجازهٔ پیاده‌سازی‌هایی برای اجرای بهینه‌سازی را می‌دهد که باعث می‌شوند، رفتار قابل مشاهدهٔ برنامهٔ خروجی همانند قانون as-if باشد؛ که یعنی وانمود کردن اینکه برنامه دقیقاً مطابق استاندارد اجرا شده‌است.
استاندارد همچنین شرایطی را توصیف می‌کند که کپی کردن را می‌توان از بین برد حتی اگر این امر باعث تغییر رفتار برنامه شود، رایج‌ترین آن بهینه‌سازی مقدار بازده است. یکی دیگر از بهینه‌سازی‌هایی که به صورت گسترده استفاده می‌شود و در زبان C ++ استاندارد توضیح داده شده‌است، زمانی است که یک شیء موقت از نوع کلاس در یک شی از همان نوع کپی می‌شود. در نتیجه، کپی کردن اولیه معمولاً معادل اولیه سازی مستقیم از نظر عملکردی است، اما در معناشناسی اینگونه نیست. کپی کردن اولیه هنوز نیاز به دسترسی به سازنده کپی دارد. بهینه‌سازی نمی‌تواند برای یک شی موقت که به یک مرجع محدود شده‌است، اعمال شود.int n = 0;
struct C { }; // در اینجا یک شی با مدت زمان ذخیره‌سازی استاتیک تولید می‌شود
int main() {
با توجه به استاندارد، بهینه‌سازی مشابهی می‌تواند روی اشیایی که پرت و گرفته می‌شوند، انجام شود؛ اما مشخص نیست که آیا بهینه‌سازی روی هر دو کپی شی پرتاب شده به شی استثنا و کپی شی تعریف شده داخل عبارت استثنا در عبارت catch اعمال می‌شود. همچنین نامشخص است که آیا این بهینه‌سازی فقط روی اشیای موقت اعمال می‌شود یا اشیا نامگذاری شده. در این رابطه به کد زیر توجه کنید:
struct C {
void f() { } // It is unclear whether this copy may be elided (omitted).
int main() {
GCC (کلکسیون کامپایلرهای گنو) گزینه ‑fno ‑ elide ‑ را برای غیرفعال کردن کپی فراهم می‌کند. این گزینه برای مشاهده (یا مشاهده نکردن) اثر بهینه‌سازی مقدار بازده یا بهینه‌سازی‌های دیگر در حذف کپی‌ها مفید است. به‌طور کلی توصیه نمی‌شود این بهینه‌سازی مهم را غیرفعال کنید.
در زمینهٔ زبان برنامه‌نویسی c++، بهینه‌سازی مقدار بازگشتی یک بهینه‌سازی کامپایلر است که از حذف اشیای موقت که برای نگهداری مقدار بازگشت تابع ساخته شده بودند، استفاده می‌کند.
RVO خصوصاً ابزار قابل توجهی برای تغییر رفتار قابل مشاهده برنامه ناشی از استاندارد C ++ است.
به‌طور کلی، استاندارد C ++ به یک کامپایلر اجازه می‌دهد تا هرگونه بهینه‌سازی را انجام دهد، مشروط بر اینکه اثر اجرایی حاصل همان رفتار قابل مشاهده را داشته باشد که گویی تمام الزامات استاندارد برآورده شده‌است. معمولاً از آن به عنوان قانون "as-if" یاد می‌شود. اصطلاح بهینه‌سازی مقدار بازگشت به یک بند ویژه در استاندارد C ++ گفته می‌شود که حتی فراتر از قاعده "as-as" می‌رود: یک اجرا ممکن است یک عملیات کپی ناشی از مقدار بازگشتی را حذف کند، حتی اگر سازنده کپی دارای عوارض جانبی باشد.
مثال زیر سناریویی را نشان می‌دهد که در آن پیاده‌سازی ممکن است یکی یا هر دو کپی ساخته شده را حذف کند؛ حتی اگر سازندهٔ کپی یک اثر جانبی قابل مشاهده داشته باشد. (چاپ کردن متن)
اولین کپی که ممکن است حذف شود، جاییست که یک حافظه موقت C و بدون نام می‌تواند در مقدار بازگشتی تابع f کپی شود؛ و دومین کپی که ممکن است حذف شود جاییست که کپی شی موقت بازگشتی توسط f در obj قرار دارد.
struct C {
C F() {
int main() {
struct Data {
Data F() {
int main() { struct Data {
Data* F(Data* _hiddenAddress) {
int main() {
در اولین مراحل تکاملc++، عدم توانایی زبان برای بازگرداندن مؤثر یک شی از نوع کلاس از یک تابع ضعف محسوب می‌شد. حدود ۱۹۹۱، والتر برایت یک تکنیک برای حداقل کردن کپی‌ها پیاده‌سازی کرد؛ که به صورت مؤثر شی پنهان شده و شی نامگذاری شده را با یک شی که برای نگهداری نتیجه به کار می‌رفت جابه‌جا می‌کرد.  struct Data {
void F(Data* p) {
int main() {
بهینه‌سازی مقدار بازگشتی در اکثر کامپایلرها پشتیبانی می‌شود. اما ممکن است شرایطی وجود داشته باشد که کامپایلر قادر به اجرای بهینه‌سازی نباشد. یک نمونهٔ رایج آن زمانی است که یک تابع ممکن است اشیای نامگذاری شدهٔ مختلفی را بسته به مسیر اجرایش برگرداند:  std::string F(bool cond = false) {
int main() {