String by ref
עד היום היינו רגילים לעשות דברים כאלו:
1 | void MyFunction(const std::string& name) |
או אם זה מתכנת שלא יודע C++ יותר מדי:
1 | void MyFunction(const char* name) |
C++ 17 העניקה לנו Type חדש המבוסס על רעיון ה-Span למחרוזות!
string_view
1 |
|
view הוא חלון לזיכרון כלשהו.string_view הוא חלון לזיכרון רצוף בגודל מסוים המהווה רשימה של תווים.
כל מה ש-view מכיל הוא מצביע וגודל.
אפשרות ההצבעה לתוך מחרוזת מעניקה לנו יכולה לבצע מניפולציות ובדיקות מבלי להעתיק את המחרוזת!
למשל טקסט csv שבודקים איפה מופיע פסיקים:
1 | std::string row{ "1,Milk,20,6" }; |
הקוד עדיין מבצע בדיקה על מחרוזות אך בתצורה הזו אנחנו נמנעים מהעתקה של מחרוזות!
אם היינו עושים זאת בעזרת std::string בלבד היינו צריכים להיזהר לא להעתיק ולהשתמש ב-const std::string& על מנת לקבל ייחוס ולא העתקה.
כמו כן גם starts_with ו-ends_with שיכולות להיות מאוד שימושיות:
1 | std::string str{ "Hello World, Bye" }; |
כמה תכונות שחשוב לזכור:
string_viewיכול להיות מועבר ע”פ ערך (בהעתקה) מכיוון שהוא אובייקט פשוט.- יש לו
dtorטריויאלי - ז”א הוא לא מקצה מאחוריו זיכרון. string_viewעוזר לנו בלהימנע מבניית מופעי מחרוזות או העתקה.
אז ממליץ להתחיל להשתמש ב-string_view וזה עוד סיבה פשוטה למה כדאי לעדכן את גרסת ה-C++ שלכם :)
תודה על הקריאה!