פורסם 2018 בינואר 107 שנים מדוע התכנית הראשית עובדת? איך הקומפיילר מפרש אותה? #include <iostream> using namespace std; class FooClass { private: int m_number; public: FooClass(int n) { m_number = n; } int getNumber() const { return m_number; } }; void func(FooClass c) {cout << "In func: c.m_number=" << c.getNumber() << endl;} int main() { func((FooClass)9); return 0; }
פורסם 2018 בפברואר 17 שנים התוכנית מפרשת את השורה: func((FooClass)9); כהמרה של אובייקט const int לטיפוס FooClass. מכיוון שקיים בנאי במחלקה המאפשר יצירה של FooClass מתוך int הוא נבחר.
פורסם 2018 בפברואר 47 שנים אני חושב שמה שעושה את העובדה היא העובדה שהקומפיילר מסתכל על הפונקציה void func(FooClass c) מבין שהוא צריך לקבל אוביקט של fooClass מסתכל על איך בונים אוביקט כזה - רואה שהוא יודע לבנות אוביקט fooCkass מהערך 9 -- חשוב לציין שגם אם תשלח 'a' הוא יחזיר 97 מאותה הסיבה זה נקרא converting cpnstruvtor http://en.cppreference.com/w/cpp/language/converting_constructor בכל מקרה הוא יבנה אוביקט זמני ידפיס את הערך וכאשר הוא יצא מהפונקציה הוא יהרוס את האוביקט (תוסיף הדפסות ותראה) נ.ב אם תוסיף לפני הבנאי שלך את המילה explicit - התוכנית לא תתקמפל
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.