קוד: |
void bar (const Foo &f) {} |
SF : |
אז אחרי עוד הרבה חיפושים מצאתי עמוד שמסביר את זה:
https://isocpp.org/wiki/faq/const-correctness (מרמור: למה כל כך קשה למצוא תיעוד ברור על C++? רוב העמודים שמצאתי הכילו מידע כל כך חלקי שאפילו אם כבר הייתי יודע את זה היה קשה לי להבין מה הם אומרים). תשובה למי שמתעצל לקרוא: כן, const מונע ממך לשנות מצב פנימי של האובייקט, וזו שגיאת קומפילציה לקרוא על ארגומנט שהועבר by const reference לפונקציה שלא הוגדרה const או שלא מקבלת אותו כ-const (אם בכלל מקבלת reference). |
קוד: |
void bar (const Foo & F ) { Foo * ptr = (Foo * ) &F; //or static_cast it is irrelevent for this example ptr->field = 1; } |
קוד: |
char *self = (char*) this; self[12] = 2; |
SF : |
אז אחרי עוד הרבה חיפושים מצאתי עמוד שמסביר את זה:
https://isocpp.org/wiki/faq/const-correctness (מרמור: למה כל כך קשה למצוא תיעוד ברור על C++? רוב העמודים שמצאתי הכילו מידע כל כך חלקי שאפילו אם כבר הייתי יודע את זה היה קשה לי להבין מה הם אומרים). תשובה למי שמתעצל לקרוא: כן, const מונע ממך לשנות מצב פנימי של האובייקט, וזו שגיאת קומפילציה לקרוא על ארגומנט שהועבר by const reference לפונקציה שלא הוגדרה const או שלא מקבלת אותו כ-const (אם בכלל מקבלת reference). |