محیط کد
کد C++ را در کادر پایین بنویسید و «اجرا» را بزنید: خروجی برنامه همان پایین میآید. Ctrl+Enter هم همین کار را میکند. هر چه در مثالهای فصلهای 06.a و 06.b دیدهاید، اینجا میتوانید امتحان کنید.
حالت کامل یک کامپایلر واقعی است، پس یک بارگیری واقعی هم دارد. حدود ۶۰ مگابایت یکبار از همین سایت گرفته میشود و در حافظهٔ نهان مرورگر میماند؛ اجراهای بعدی در کسری از ثانیه شروع میشوند. این حالت وقتی کار میکند که صفحه از یک وبسرور (http/https) باز شده باشد — فایل بازشده بهطور مستقیم (file://) نمیتواند آن را بار کند.
هنوز چیزی بارگیری نشده است.
«اجرا» را بزنید — خروجی همینجا میآید.
هیچچیز از این صفحه بیرون نمیرود
هیچ فراخوان سروری و هیچ آمارگیریای وجود ندارد. کد شما فقط در حافظهٔ محلی همین مرورگر نگه داشته میشود تا بار بعد هم در دسترس باشد.
برنامهٔ بیپایان متوقف میشود
حالت سریع پس از ۳ ثانیه و حالت کامل پس از ۲۵ ثانیه رها میشود؛ در حالت کامل برنامه در یک کارگر جداگانه اجرا میشود تا حلقهٔ بیپایان بدون قفلشدن صفحه متوقف شود.
مثالهای دو فصل C++
هر مثال همان کد یک اسلاید از فصلهای 06.a یا 06.b است (ورودی و خروجی هم آمده است). روی کارت بزنید تا در ویرایشگر بار شود، بعد «اجرا» را بزنید. مثالهای حالت سریع با using namespace std; نوشته شدهاند تا مفسر هم آنها را بفهمد؛ کد کتاب با std:: بیتغییر در حالت کامل اجرا میشود.
گامهای نخست — مبانی، عملگرها و شرط
حلقهها، آرایهها و توابع
C++ امروز — این سه به حالت کامل نیاز دارند
راهنما، موتورها و محدودیتها
دو موتور پیشنهاد میشود چون دو نیاز متفاوت دارند: یکی در همان لحظه و همیشه در دسترس است، دیگری کامپایلری واقعی است و برنامههای کامل C++17 را میسازد.
کدام موتور را انتخاب کنم؟
| حالت سریع (مفسر) | حالت کامل (کامپایلر C++17) | |
|---|---|---|
| موتور | JSCPP — یک مفسر C++ نوشتهشده به JavaScript | clang + lld (LLVM 8.0.1) کامپایلشده به WebAssembly |
| آغاز کار | همان لحظه، بدون بارگیری | یکبار ≈۶۰ مگابایت، سپس در حافظهٔ نهان مرورگر |
| سرعت | کندتر — کد خطبهخط تفسیر میشود | سریع — کد ماشین واقعی WebAssembly، ساختهشده با -O2 |
| پوشش C++ | زیرمجموعهای به سبک C: بدون کلاس و بدون STL | C++17 با کتابخانهٔ استاندارد: struct، class، string، vector، map، sort، قالبها |
| سقف زمان اجرا | ۳ ثانیه، سپس متوقف میشود | ۲۵ ثانیه، سپس کارگر از بین میرود |
| کجا کار میکند | همهجا، حتی اگر فایل با دوبار کلیک باز شود (file://) | فقط روی http/https — مرورگر بار کردن WebAssembly از file:// را نمیپذیرد |
| محل اجرا | مرورگر شما، همین زبانه | مرورگر شما، یک رشتهٔ کارگر جداگانه |
حالت سریع از چه چیزی پشتیبانی میکند
یک تفاوت، پای همهٔ خوانندگان کتاب را میگیرد: مفسر سریع عملگر دامنه را نمیشناسد، پس std::cout تجزیهٔ برنامه را با پیامی دربارهٔ همان خط متوقف میکند. زیر فایلهای سرآمد using namespace std; را بنویسید و سپس cout خالی — برنامه هنوز C++17 معتبر است، و کد خودِ کتاب با std:: بیتغییر در حالت کامل اجرا میشود.
کار میکند
- cin / cout، printf / scanf
- همهٔ عملگرها، از جمله ++ / -- و %
- if / else، switch، عملگر ?:
- for، while، do-while، break، continue
- توابع: تعریف، اعلان، مقدار بازگشتی، آرگومان پیشفرض، بازگشت، void
- بارگذاری بیشازحد بر پایهٔ فهرست آرگومانها
- آرایههای یکبعدی و دوبعدی، آرایههای سراسری
- رشتههای char[] با توابع cstring
- اشارهگرها و &، sizeof، #define
- cmath، cstdlib، iomanip
کار نمیکند — از حالت کامل استفاده کنید
- struct و class
- std::string، std::vector، std::sort و بقیهٔ STL
- عملگر دامنهٔ :: — std::cout اینجا خطای تجزیه میدهد
- static_cast<…> — بهجایش (double)x بنویسید
- new و delete
- حلقهٔ بازهای (for (int x : v))
- پارامترهای مرجع (int &x)
- فراخوانی تابع همنام با آرگومانی که دقیقاً همنوع پارامتر نیست (Multiply(4)) — بنویسید Multiply(4.0)
حالت کامل از چه چیزی پشتیبانی میکند
کار میکند — همهٔ موارد بالا، بهعلاوهٔ
- struct و class با سازنده و متد
- string، vector، map، pair، sstream
- sort و سرآمد algorithm، همراه با توابع مقایسه
- قالبها، lambda، auto، حلقهٔ بازهای
- new / delete و اشارهگرها
- iomanip، cmath، cstdlib، long long
کار نمیکند و اینجا روشنشدنی نیست
- استثناها: try، catch و throw. این ساخت clang با استثناهای خاموش ساخته شده است؛ کامپایلر خودش همین را میگوید.
- ورودی/خروجی فایل (fstream) و گرافیک: درون این جعبهٔ شنی فایلسیستم یا پردهٔ تصویر واقعی وجود ندارد.
یک تفاوت دیگر: خودِ C++ محدودهٔ آرایه را بررسی نمیکند. در حالت کامل، a[9] روی آرایهٔ سهخانهای هر چه در حافظه باشد میخواند (مثل هر کامپایلر واقعی)؛ مفسر معمولاً آن را میگیرد و خطا گزارش میکند.
پرسشهای پرتکرار
چرا صفحه پس از بار اول بدون اینترنت هم کار میکند؟
همهٔ این کتاب — قلمها، سبکها، اسکریپتها و کل زنجیرهٔ ابزار — از همین سایت سرو میشود. هیچچیز از نشانی بیرونی گرفته نمیشود، پس هر صفحه پس از بار نخست آفلاین هم کار میکند (حالت کامل هم، چون مرورگر آن ۶۰ مگابایت را در حافظهٔ نهان نگه میدارد).
فایل ذخیرهشده را مستقیم باز کردم و حالت کامل بار نمیشود. چرا؟
صفحهای که با file:// باز شده باشد اجازهٔ گرفتن ماژولهای WebAssembly ندارد — این یک قاعدهٔ امنیتی مرورگر است، نه محدودیت این سایت. حالت سریع در همان شرایط بیمشکل کار میکند. برای حالت کامل، سایت را از نشانی خودش باز کنید یا در پوشه یک سرور محلی یکخطی راه بیندازید (python3 -m http.server).
کد من جایی ذخیره میشود؟
فقط در مرورگر خودتان (حافظهٔ محلی) — تا آنچه نوشتهاید بار بعد هم بماند. هیچچیز به سروری فرستاده نمیشود، بدون حساب کاربری و بدون ردیابی. دکمهٔ «بازنشانی نمونه» آن را پاک میکند.
حالت سریع میگوید برنامه از سقف زمان گذشت.
مفسر برنامهای را که در ۳ ثانیه تمام نشود متوقف میکند؛ این معمولاً یعنی حلقهای که شرط پایانش هرگز درست نمیشود. شمارندهٔ حلقه و حد آن را بررسی کنید — بخش ۶.۴ کتاب.
چرا عدد من ۳ چاپ میشود و نه ۳٫۰؟
تقسیم صحیح. اگر دو طرف / از نوع int باشند، C++ بخش اعشاری را دور میریزد — همان هشدار ⚠ اسلایدها، و دلیل اینکه مثالها static_cast<double>(sum) / n مینویسند.
صفحهکلید
- Ctrl / ⌘ + Enter — اجرای برنامه
- Tab — تورفتگی خطهای انتخابشده
- Ctrl / ⌘ + Z — بازگردانی
- Esc — توقف برنامهٔ در حال اجرا در حالت کامل