לא הבנתי:
מה בדיוק עולה בביצועים וקוד נוסף?
 
החזרת ערך אינה משפיע על ביצועי התוכנה כלל.
אם כבר, הצבת ערך חוזר במחסנית יכולה, במקרים מסוימים, להיות זולה יותר מאשר כתיבתו לאיבר של אובייקט שנשמר ב-heap.
 
אבל זה בכל מקרה "מיקרו אופטימיזציות" שלא רלוונטיות ולא נחוצות בשפות מודרניות עם קומפיילרים מודרניים.
 
גם לא ברור איזה קוד נוסף נדרש כאן, מעבר להחלפת שורת הצבה בשורה של return?
 
ייתכן שאני מפספס משהו משום שאני לא מכרי את כל פרטי המימוש, שאתה מן הסתם לא יכול לפרסם.
אבל לפי מה שאני מבין, הכל מתנקז לשאלה של דיזיין.
 
זה נכון, שאם תיצור אובייקט זמני ותשלח ref קבוע אליו, האובייקט עדיין נוצר.
 
השאלה האם לשלם את העלות הזו, תלויה בנחיצותו של האובייקט עצמו.
כלומר, האם בכלל יש צורך שהאובייקט יהיה קיים?
כדי לענות על השאלה הזו, צריך לדעת מה הפונקציה שלך עושה עם האובייקט:
 
כתבת שהפונקציה בעיקר קוראת מידע מהאובייקט.
אם כך, אולי בכלל לא צריך להעביר לה אובייקט, אלא רק את המידע הרלוונטי ממנו?
 
בהתאם לכמות השדות שהפונקציה צריכה, ייתכן שהגיוני לפצל אותם לפרמטרים ולהעביר רק את הפרמטרים מאשר להתעסק עם יצירת אובייקטים זמניים.
 
אבל אני רק זורק ניחושים.
בלי לדעת את מפרט הבעיה המלא וה-Use case, דברים שאני מניח שאינך יכול לשתף בפורום, קשה לענות על שאלות דיזיין שכאלה.
 
אני מניח שיש דרכים לעקוף את מגבלת הסטנדרט.
תלוי בתוצאה שאתה מנסה להשיג, ייתכן שאתה עדיין יכול לקמפל עם msvs בצורה כזו או אחרת, למצוא צירוף פרמטרים ל-gcc שיוותר לך, או לעבור לקומפיילר אחר כמו llvm (אם תמצא אחד שממש הרחבות דומות ל-msvc).
 
אני בכל זאת ממליץ לכתוב קוד תקני שיתקמפל בכל קומפיילר וכל סביבה, ולחשוב טוב טוב על הדיזיין של הקוד.
אם אתה מוצא את עצמך נלחם בסטנדרט של השפה, או שהשפה דפוקה, או שהשפה לא מתאימה לשימוש שלך, או שהדיזיין שלך דפוק.
 
אני חושב שאנו יכולים לפסול את שני האופציות הראשונות במקרה הזה:
++C נחשבת לשפה וותיקה וטובה ונפוצה בתעשייה, ואתם משתמשים בה כבר די הרבה זמן.
אז כנראה שהבעיה היא פשוט בעיית דיזיין קטנה, ואולי פשוט קיבלת הזדמנות לשפר את הקוד.
 
נצל אותה!
 
בהצלחה!