warning C4800

vinney

Well-known member
warning C4800

זה המלל: warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning) זה בא כשאני מקמפל משהו שמשתמש בSTL. מישהו נתקל? רעיונות? להתעלם? לעשות משהו? תודה
 

cyberia2ooo

New member
הערה זו מתקבלת כאשר יש מצב כזה

int variable; variable = (a == b); למה, כי הביטוי a == b הוא ביטוי בוליאני, כלומר יחזיר או true או false והמשתנה variable הוא int. לכן ההודעה הזו. זה מאד מקובל להשתמש בint כדי לייצג ערך בוליאני, בעיקר מפני שבקוד סי אין ערך bool רק int לכן ביטויים בוליאנים יוצגו ע"י int. אבל ב++c יש טיפוס bool לכן אתה מקבל את ההערה.
 

vinney

Well-known member
ומה אני עושה עם זה?

זה תוצאה של map עם int בתור מפתח... האזהרה נופלת בתוך קובץ MAP, יעני התבנית עצמה, אבל אני לא רואה שום סיבה לא להשתמש בint בתור מפתח...
 

karmma

New member
נראה לי שבדיוק להפך

הוא מנסה לשים ערך int למשתנה בוליאני והקומפיילר צריך להוסיף קוד כדי להפוך כל ערך שונה מ 0 ל true
 

Zack DA

New member
נדמה לי שאתה צודק.

ואם זה כך, כדאי לעטוף את הביטוי שחוזר באיזו שהיא מתודה שעושה את ה- cast כמו שאתה רוצה שהיא תעשה.
 

cyberia2ooo

New member
אממ יכול להיות

בכל מקרה, קאסטינג ידני, או תנאי יפתרו לו את הבעיה של הקפצת הוורנינג. בכל מקרה, אם לפי הדרישה שלו 0 זה false וכל ערך אחר זה true הוא יכול בשקט להתעלם מהבעיה הנ"ל. למרות שבאופן כללי, אם זה קוד שהוא כתב כדאי לדאוג שמשתנה מסוג bool יכיל רק true או false. אגב, יכול מאד להיות שהודעה הזו נבעה מבלבול של BOOL וbool כאשר אחד הוא type והשני typedef
 

vinney

Well-known member
אני פשוט אתעלם מזה בינתיים

אם זה יפריע לי בהרצה, אני אחזור לזה.
 
למעלה