האם כדי להשתמש בספריות הסטנדרטיות ב-C++ חייבים להציין במפורש using namespace std (או std: או שיש דרך לציין לקומפיילר שישתמש בניימספייס הזה עבור ה-main?
לעשות ממש ביטול - לזה אין טעם - כי מרחב השם בכל מקרה הוtא רק ביחידת הקוד בה הוא מוצהר - ואם אתה עושה זאת עם חשיבה מראש - אין סיבה לעשות ביטול. מה שכן - לפעמים יכול להיות שיש "הצלבה" - כלומר שני שמות של פונקציות או משתנים או טיפוס - שמופיעים בשני מרחבי שם, ואז מה שאתה עושה, את הקריאה אתה רושם עם מרחב שם מפורש - לדוגמא:
using namespace std; void foo() { myNameSpace::cout<<specialObject; //you own implementation of cout cout<<"std cout"<<endl; //the std::cout }
או שאתה מלכלך את כל הפרויקט ושם את זה ב header שמוכלל בהכל או שאתה צריך את זה רק לחלקים ספציפיים ואז אתה שם את זה רק במימוש של cpp ספציפיים. אם אתה טוען שגם ככה אתה משתמש בזה בכל מקום ומקום בתוכנית אז תעשה מה ש vinney אמר וזהו.
הבעיה הופיעה בעת שידרוג המערכת מ-RedHat 7.2 ל-RedHat 8.0 העידכון עידכן גם את הקומפיילר gcc לגירסה 3.2 שמחייבת שימוש בניימספייס. מדובר בפרוייקט גדול שלשנות את כל קבצי המקור שלו זו בעיה. האם ניתן בלינוקס RH8.0 להתקין את gcc בגירסה 2.96 (הגירסה הישנה) במקביל לגירסה 3.2 (הגירסה שבאה עם RH8.0) ולקמפל את הפרוייקט הזה בגירסה הישנה ופרוייקטים אחרים בחדשה, או שעלולים להיווצר קונפליקטים בין הגרסאות?
נכון שבGCC לפני 3 לא הייתה הבעיה, אבל הסיבה לכך היא שGCC 3 הותאם לסטנדרט של ++C שאומץ ב1999, ושכולל את הnamespace std. לפני כן באמת לא היית חייב את הnamespace. אם תמשיך לכתוב בGCC 2.96 בלי הstd, התוכנה שלך לא תתאים לתקן ++C.
ועד היום הוא עבד עם 2.96 לכן אני לא רואה בעיה מהותית להמשיך לעבוד בפרוייקט זה עם אותה הגירסה. נכון שקוד חדש מן הראוי שיתאים לסטנדרט ויקומפל בגרסה חדשה, אבל לעדכן את כל הפרוייקט רק בגלל שינוי גרסת רד-האט זה ממש תיק פלילי
זה לא כזה תיק פלילי כמו שזה נראה, השינויים הם די מינוריים. כשתתחיל להתעסק עם זה באמת, אתה תראה שתסיים הכל תוך יומיים, ותפתור לעצמך הרבה בעיות תאימות לעתיד. התאמת הקוד שלך לתקן תבטיח שלא תתקל שוב בבעיה שכזאת, שנובעת מחוסר תאימות קומפיילר אחד למשנהו. אחרי הכל, אף אחד לא בונה תוכנות מסחריות בטורבו C למשל, למרות שאפשר היה להמשיך פרוייקטים ישנים איתה כדי לא לעשות המרות לסטנדרט