Menu

מה זה C++? השפה, המהירות שלה ואיפה היא רצה

מה זה בעצם C++, למה היא מתקמפלת ישירות לקוד מכונה נייטיב, ואילו סוגי תוכנה עתירת ביצועים בונים איתה.

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

C++ במשפט אחד

C++ היא שפת תכנות מקומפלת עם טיפוסים סטטיים, שהופכת את קוד המקור שלכם ישירות לקוד מכונה נייטיב. החלטת העיצוב היחידה הזו, בלי interpreter ובלי מכונה וירטואלית שיושבים בין התוכנית למעבד, היא הסיבה ש-C++ היא אחת השפות המהירות ביותר שאפשר לכתוב בהן, והסיבה שהיא מניעה את התוכנה שפשוט אסור לה להיות איטית.

הנה התוכנית הראשונה המתבקשת. הריצו אותה כאן:

יש כאן יותר מבנה מאשר בשפת סקריפטים, וזה בכוונה: C++ נותנת שליטה מדויקת בתמורה לכך שכותבים הכול במפורש. נפרק כל חלק כאן בדפים הבאים.

למה C++ מהירה

רוב שפות הסקריפטים מריצות את הקוד דרך interpreter או מכונה וירטואלית שקוראים ומבצעים הוראות בזמן ריצה. C++ מדלגת על כל זה:

  1. מהדר (כמו g++ או clang++) קורא את קוד המקור .cpp ומתרגם אותו להוראות מכונה עבור מעבד ומערכת הפעלה מסוימים.
  2. התוצאה היא קובץ הרצה עצמאי שהמעבד מריץ ישירות: שום דבר לא עומד בין הקוד שלכם לחומרה.

מכיוון שאין תרגום שקורה בזמן שהתוכנית רצה, תוכניות C++ עולות מיד ורצות במהירות המלאה של המעבד. מקבלים גם שליטה מדויקת בזיכרון ובחומרה ששפות ברמה גבוהה יותר מסתירות מכם בכוונה.

המחיר: קוד המכונה הזה בנוי לפלטפורמה אחת. קובץ הרצה שקומפל ב-Windows לא ירוץ על Mac: מקמפלים מחדש את קוד המקור לכל יעד. (לעומת Java, שמתקמפלת ל-bytecode נייד שרץ על כל JVM.)

טיפוסים סטטיים וריבוי פרדיגמות

שתי תכונות קובעות איך קוד C++ נראה ומרגיש.

טיפוסים סטטיים (statically typed) פירושו שלכל משתנה יש טיפוס שידוע בזמן קומפילציה, והמהדר בודק את הטיפוסים עוד לפני שהתוכנית רצה:

count הוא int לכל אורך חייו; ניסיון לאחסן בו "hello" לא יתקמפל. זה תופס קבוצה שלמה של טעויות מוקדם, במחיר של קצת יותר הקלדה מראש.

ריבוי פרדיגמות (multi-paradigm) פירושו ש-C++ לא כופה עליכם סגנון אחד. אפשר לכתוב קוד פרוצדורלי פשוט, לארגן לוגיקה במחלקות (מונחה עצמים), או להשתמש ב-templates לקוד גנרי שאפשר לעשות בו שימוש חוזר. רוב התוכניות האמיתיות משלבות את שלושתם. הגמישות הזו חזקה, אבל היא גם אומרת של-C++ יש הרבה מה ללמוד: ניקח את זה מושג אחד בכל פעם.

בשביל מה משתמשים ב-C++

C++ מופיעה בכל מקום שבו ביצועים ושליטה הם לא נתונים למשא ומתן:

  • מנועי משחקים: Unreal Engine, הליבה של Unity, ורוב הקוד של משחקי AAA.
  • תוכנת מערכת: מערכות הפעלה, דרייברים ודפדפנים כמו Chrome ו-Firefox.
  • שירותים עתירי ביצועים: מסדי נתונים, מערכות מסחר ותשתיות חיפוש שבהן כל מיקרו-שנייה נחשבת.
  • מערכות משובצות וחומרה: קושחה לרכבים, רחפנים, מכשור רפואי ו-IoT.

אם תוכנה צריכה להיות מהירה, להסתפק בזיכרון מצומצם או לדבר ישירות עם החומרה, יש סיכוי טוב שהיא כתובה ב-C++.

C++ היא לא C (אבל היא התחילה שם)

C++ צמחה מתוך C בשנות ה-80 בתור "C עם מחלקות", והיא עדיין ברובה הרחבה של C: הרבה קוד C תקין מתקמפל כ-C++. אבל השפה גדלה מאוד מאז.

C++ מוסיפה תכנות מונחה עצמים, templates לקוד גנרי, הפניות, חריגות וספרייה סטנדרטית עשירה מלאה בכלים מוכנים. הקטע הזה משתמש באחד מהם, vector: מערך בגודל משתנה שמנהל את הזיכרון של עצמו, משהו שב-C הייתם צריכים לבנות ידנית:

C++ מודרנית (התקנים C++11, C++17 ו-C++20) נשענת מאוד על כלים כאלה כדי להפוך את השפה לבטוחה ולאקספרסיבית יותר משורשי ה-C שלה. טעות נפוצה של מתחילים היא לכתוב C++ בסגנון C, עם זיכרון ידני ומערכים גולמיים בכל מקום, כשהספרייה הסטנדרטית כבר פותרת את הבעיה בשבילכם. לאורך התיעוד הזה נעדיף את הסגנון המודרני.

שאלות נפוצות

בשביל מה משתמשים ב-C++?

C++ מניעה תוכנה שבה מהירות ושליטה חשובות: מנועי משחקים (Unreal, הליבה של Unity), מערכות הפעלה, דפדפנים (Chrome, Firefox), מסדי נתונים, מערכות מסחר ומכשירים משובצים. הכוח שלה הוא לרוץ קרוב לחומרה ועדיין להציע יכולות ברמה גבוהה כמו מחלקות, templates והספרייה הסטנדרטית.

האם C++ היא שפה מקומפלת או מפורשת?

C++ היא שפה מקומפלת. מהדר כמו g++ או clang++ מתרגם את קוד המקור ישירות לקוד מכונה נייטיב עבור מעבד ומערכת הפעלה מסוימים, ומייצר קובץ הרצה עצמאי. אין interpreter או מכונה וירטואלית בין התוכנית למעבד, ולכן C++ כל כך מהירה.

מה ההבדל בין C ל-C++?

C++ התחילה בתור "C עם מחלקות" והיא ברובה הרחבה של C, כך שרוב קוד ה-C מתקמפל גם כ-C++. התוספות הגדולות הן תכנות מונחה עצמים (מחלקות וירושה), templates, הספרייה הסטנדרטית (קונטיינרים כמו vector ו-map), הפניות, חריגות, והרבה יכולות בטיחות ונוחות שאין ב-C.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל