לדלג לתוכן

1.2 - אתחול והסקת טיפוסים - תרגול

תרגול - טיפוס כבדיקה של כוונה

כתבו תוכנית אחת שמכילה את כל הניסויים התקינים, וקובץ נפרד לכל ניסוי שאמור להידחות. אין להשאיר שורות לא תקינות בתוכנית שאמורה לרוץ.

בנייה של כמות ונתונים

צרו vector בעל ארבעה איברים שערכם תשע, ו־vector בעל שני איברים שערכיהם ארבע ותשע. לפני ההרצה כתבו איזו צורת אתחול בחרתם ומדוע. הוסיפו הדפסה של כל האיברים, כדי שגודל נכון לא יסתיר ערכים שגויים.

הגדירו טיפוס RetryCount שמחזיק מספר לא שלילי ובנאי explicit. הדגימו קריאה מפורשת לפונקציה שמקבלת אותו וקריאה עם מספר רגיל שצריכה להידחות.

העתק או קשר למקור

התחילו בקוד הבא בתוך main:

int number = 6;
const int& observed = number;
auto first = observed;
auto& second = number;
decltype((number)) third = number;

כתבו בדיקות טיפוס עם std::is_same_v לכל שלושת המשתנים. שנו כל אחד מהם בתורו והדפיסו את number. הסבירו מי מחזיק ערך נפרד ומי מספק גישה לאותו אובייקט.

סכנה בחתימה

בחנו את שתי הפונקציות הבאות בלי לקרוא לגרסה המסוכנת:

auto first_value() {
    int value = 8;
    return value;
}

decltype(auto) second_value() {
    int value = 8;
    return (value);
}

קבעו את טיפוס ההחזרה של כל פונקציה והסבירו למה שינוי לכאורה קטן משנה את חוקיות השימוש בתוצאה. הציעו תיקון שמחזיר ערך עצמאי; אין צורך לגרום לקריסה כדי להוכיח שהחתימה השנייה בעייתית.