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++
שלכם :)
תודה על הקריאה!