פורסם 2011 במרץ 2114 שנים אני מתכוון מתי אני שם CONST בחתימה של פונקציה , בערך המוחזר והערך שהיא מקבלת.תודה מראש,
פורסם 2011 במרץ 2114 שנים כשאתה מגדיר משתנה או פרמטר כ-const זה אומר שהוא "קבוע". כלומר אתה לא יכול לשנות אותו, אם הוא class/struct אז אתה לא יכול לשנות את האיברים שלו, ואם יש לו מתודות אז אתה יכול להפעיל רק את אלו שמוגדרות גם כ-const.צריך לשים const בחתימה של מתודה כשאתה רוצה להבטיח שהמתודה לא תשנה את התוכן של האובייקט.צריך להגדיר טיפוס כ-const כשאתה רוצה להבטיח שלא תשנה אותו. זה פחות חשוב כשאתה מגדיר משתנים סתם ככה, אבל זה שימושי כשאתה מגדיר פונקציה שמקבלת פרמטר, ואתה רוצה שהפונקציה תבטיח שהיא לא תוכל לשנות את הפרמטר הזה (ואז אתה מגדיר את הפרמטר כ-const). לחילופין, אם מתודה של אובייקט מחזירה התייחסות (reference, ע"י & או ע"י מצביע) למשתנה פנימי של האובייקט, אז אתה מחזיר אותו כ-const על מנת לוודא שמי שקיבל את הערך הזה לא יוכל לשנות אותו.
פורסם 2011 באפריל 214 שנים כדאי להוסיף:אני ממליץ להשתמש בconst איפה שרק אפשר. אם יש לך פונקציה שאתה יודע שלא אמורה לשנות את המצב של האובייקט תצהיר עליה ב const. אתה לא תוכל לשנות משתנים שהם חלק מהאובייקט, אבל תוכל לקרוא לפונקציות של אותם משתנים או של אותו אובייקטים המוגדרות גם הן כ const.גם משתנים שאתה מגדיר תוך כדי הפונקציה - אם אתה יודע שלא אמורים לשנות את המשתנה אחרי שהגדירו אותו, תצהיר על כקבוע.בדומה, פרמטרים - יכול להיות שהפונקציה עצמה משנה את האובייקט שאליו היא שייכת, אבל לא אמורה לשנות פרמטרים שמעבירים אליה - אז תצהיר עליהם כקבועים.שים לב שצריך להזהר עם מצביעים וreferences. פה יש התנהגות קצת מבלבלת. הנה קטע שלקחתי מפה: Read it backwards...int* - pointer to intint const * - pointer to const int int * const - const pointer to int int const * const - const pointer to const int Now the first const can be on either side of the type so:const int * == int const * const int * const == int const * const If you want to go really crazy you can do things like this:int ** - pointer to pointer to int int ** const - a const pointer to a pointer to an int int * const * - a pointer to a const pointer to an int int const ** - a pointer to a pointer to a const int int * const * const - a const pointer to a const pointer to an int And my addition (gmorphus):Let's look at the following declarations:int * pi;const int *pci; // pointer to a const intint * const pic; // const pointer to a non-const intconst int * const pcic; // const pointer to a const intint i; // regular int*pi = 7; // change the value pointed to by pi - allowedpi = &i; // change pi to point to a different location - allowed*pci = 7; // will not compile!pci = &i; // OK! the pointer is not constant*pic = 7; // OK! pic is pointing to a non-const intpic = &i; // will not compile! pointer is constant*pcic = 7; // will not compilepcic = &i; // will not compile
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.