جزوه تایپ شده برنامه نویسی شبکه
وراثت به یک نوع داده اجازه استاد تا ویژگی های سایر انواع داده را بدست آورد. وراثت از یک کلاس پایه ممکن است به عنوان عمومی، محافظت شده یا خصوصی اعلام علمی کاربردی. این مشخصکننده دسترسی تعیین میلینک که آیا کلاسهای غیرمرتبط و مشتق شده میتوانند به اعضای عمومی و محافظتشده جزوه برنامه نویسی شبکه پایه به ارث رسیده دسترسی مشکل باشند. فقط وراثت عمومی با آنچه معمولاً از “ارث” معنی علمی کاربردی مطابقت را. دو مشکل دیگر بسیار کمتر مورد استفاده قرار می گیرند. اگر مشخص کننده دسترسی حذف علمی کاربردی، یک “کلاس” به صورت خصوصی ارث می برد، در حالی که یک “struct” به صورت عمومی ارث می برد. کلاس های پایه ممکن است به عنوان مجازی اعلام شوند. این وراثت مجازی نامیده علمی کاربردی . وراثت مجازی تضمین لینک که تنها یک نمونه از یک کلاس پایه در گراف ارث وجود را.
وراثت چندگانه یک ویژگی C++ است که به یک کلاس اجازه استاد از بیش از یک کلاس پایه مشتق علمی کاربردی. این اجازه استاد تا دانشگاه روابط ارثی دقیق تر. به عنوان مشکل، یک کلاس “گربه پرنده” دارد هم از “گربه” و هم از “پستانداران پرنده” به ارث ببرد. برخی از زبانهای دیگر، مانند C# یا جاوا ، چیزی مشابه (هر چند محدودتر) را با اجازه ارث بردن چندین رابط مشکل میدهند در حالی که تعداد کلاسهای پایه را به یک محدود میکنند (اینترفیسها، بر خلاف کلاسها، فقط اعلانهای توابع عضو را ارائه میدهند، بدون اجرا یا عضو. داده ها). یک رابط مانند C# و Java را می توان در C++ به عنوان یک کلاس حاوی توابع مجازی خالص تعریف کرد که اغلب به عنوان یک کلاس پایه انتزاعی شناخته علمی کاربردی.یا “ABC”. توابع عضو چنین کلاس پایه انتزاعی معمولاً به طور صریح در کلاس مشتق شده تعریف هستم، نه به طور ضمنی به ارث برده هستم. وراثت مجازی C++ یک ویژگی تفکیک ابهام به نام تسلط را نشان استاد.
بارگذاری بیش از حد اپراتورها و اپراتورها
اپراتورهایی که نمی توانند بیش از حد بارگذاری شوند
اپراتور نماد
عملگر وضوح محدوده ::
اپراتور مشروط ?:
عملگر نقطه .
اپراتور انتخاب اعضا .*
عملگر ” sizeof “. sizeof
عملگر ” typid ” . typeid
مقاله اصلی: اپراتورهای C و C++
C++ بیش از 35 عملگر را ارائه استاد که محاسبات پایه، دستکاری بیت، غیر جهت، مقایسه ها، عملیات منطقی و موارد دیگر را پوشش استاد. تقریباً همه عملگرها را میتوان دانشگاه انواع تعریفشده توسط کاربر، با چند استثناء قابل توجه مانند دسترسی اعضا ( .و .*) و همچنین عملگر شرطی بارگذاری کرد. مجموعه غنی از اپراتورهای قابل بارگیری دانشگاه اینکه انواع تعریف شده توسط کاربر در C++ مانند انواع داخلی به نظر برسند، مرکزی است.

اپراتورهای قابل بارگیری همچنین بخش اساسی بسیاری از جزوه برنامه نویسی شبکه های برنامه نویسی پیشرفته C++ مانند اشاره گرهای هوشمند هستم. بارگذاری بیش از حد یک اپراتور، اولویت محاسبات مربوط به اپراتور را تغییر استاد، و همچنین تعداد عملوندهایی را که اپراتور استفاده لینک تغییر استاد (هر عملوند ممکن است توسط اپراتور نادیده گرفته علمی کاربردی، اگرچه قبل از اجرا ارزیابی علمی کاربردی). اپراتورهای ” &&” و ” ” با بارگذاری بیش از حد ، ویژگی ارزیابی اتصال کوتاه خود را از دست دارد . ||
چند مشکلی
همچنین ببینید: چندمشکلی (علوم کامپیوتر)
Polymorphism یک رابط مشترک را دانشگاه بسیاری از پیاده سازی ها و دانشگاه اشیا در شرایط دارد امکان استاد.
C++ از چندین نوع پلی مورفیسم ایستا (حل شده در زمان کامپایل ) و پویا (حل شده در زمان اجرا ) پشتیبانی لینک که توسط ویژگی های زبانی که در بالا توضیح داده شد پشتیبانی هستم. چند مشکلی زمان کامپایل دانشگاه تصمیمات زمان اجرا خاصی اجازه استاد، در حالی که پلی مورفیسم زمان اجرا معمولاً جریمه عملکرد را متحمل علمی کاربردی.
پلی مورفیسم ایستا
همچنین نگاه دارد به: چندمشکلی پارامتریک و چندمشکلی ad hoc
بارگذاری بیش از حد تابع به برنامه ها اجازه استاد تا چندین توابع را با نام یکسان اما با آرگومان های متفاوت اعلام کنند (یعنی چند مشکلی ad hoc ). توابع با تعداد یا انواع پارامترهای رسمی خود متمایز هستم . بنادانشگاهن، نام یک تابع بسته به زمینه ای که در آن استفاده علمی کاربردی، دارد به توابع داردی اشاره لینک. نوع برگردانده شده توسط تابع دانشگاه تشخیص توابع بیش از حد بارگذاری شده استفاده علمی کاربردی و انواع برگشتی متفاوت منجر به پیام خطای زمان کامپایل علمی کاربردی.
هنگام اعلام یک تابع، یک برنامه نویس دارد دانشگاه یک یا چند پارامتر یک مقدار پیش فرض را تعیین لینک. مشکل این کار به پارامترهای دارای پیشفرض اجازه میاستاد تا به صورت اختیاری هنگام فراخوانی تابع حذف شوند، در این صورت از آرگومانهای پیشفرض استفاده علمی کاربردی. هنگامی که یک تابع با آرگومان های کمتر از پارامترهای اعلام شده فراخوانی علمی کاربردی، آرگومان های صریح با پارامترها به ترتیب چپ به راست مطابقت داده هستم و به هر پارامتری که در انتهای فهرست پارامترها وجود را، آرگومان های پیش فرض آنها اختصاص داده علمی کاربردی. در بسیاری از موارد، تعیین آرگومان های پیش فرض در یک اعلان تابع به ارائه تعاریف تابع بیش از حد با تعداد پارامترهای دارد ارجحیت را.
الگوها در C++ یک مکانیسم پیچیده دانشگاه نوشتن کدهای عمومی و چند مشکلی (یعنی چندمشکلی پارامتریک ) ارائه میکنند. به طور خاص، از طریق الگوی الگوی تکرارشونده عجیب ، میتوان مشکلی از چندمشکلی استاتیک را پیادهسازی کرد که بهخوبی از نحو دانشگاه نادیده گرفتن توابع مجازی تقلید میلینک. از آنجایی که قالبهای ++C از نوع آگاه و تورینگ کامل هستم، میتوان از آنها دانشگاه حل کردن شرطهای بازگشتی به کامپایلر و ایجاد برنامههای اساسی از طریق فرابرنامهنویسی الگو استفاده کرد. بر خلاف برخی نظرها، کد قالب پس از کامپایل با تنظیمات مناسب کامپایلر، کد انبوه تولید نلینک. [69]
دانلود رایگان خلاصه جزوه برنامه نویسی شبکه کتاب pdf
فهرست مطالب
همچنین ببینید: زیر تایپ
اشاره گرهای متغیر و ارجاع به یک نوع کلاس پایه در C++ همچنین می توانند به اشیاء هر کلاس مشتق شده از آن نوع اشاره کنند. این به آرایه ها و انواع دیگر کانتینرها اجازه استاد تا نشانگرها را به اشیاء با انواع دارد نگه دارند (مرجعات را نمی توان مستقیماً در جزوه برنامه نویسی شبکه نگه داشت). این امر چندمشکلی پویا (زمان اجرا) را امکان پذیر لینک، که در آن اشیاء ارجاع شده بسته به نوع (واقعی، مشتق شده) آنها می توانند رفتار متفاوتی مشکل باشند.
C++ همچنین اپراتور را فراهم لینک که به کد اجازه استاد تا با خیال راحت یک شی را از طریق یک مرجع / اشاره گر پایه به یک نوع مشتق شده تر تبدیل لینک: downcasting . این تلاش ضروری است زیرا اغلب نمیدانیم به کدام نوع مشتق شده اشاره شده است. ( بهروزرسانی ، تبدیل به یک نوع عمومیتر، همیشه را در زمان کامپایل از طریق بررسی/اجرا علمی کاربردی ، زیرا کلاسهای اجدادی در رابط کلاس مشتقشده مشخص شدهاند که دانشگاه همه تماسگیرندگان قابل مشاهده است.) به اطلاعات نوع زمان اجرا (RTTI) وابسته است. ابرداده در برنامه که امکان تمایز انواع و روابط آنها را فراهم لینک. اگر a به یک اشاره گر شکست بخورد، نتیجه این استdynamic_caststatic_castdynamic_castdynamic_castnullptrثابت، در حالی که اگر مقصد یک مرجع برای (که ندارد تهی برای)، بازیگران یک استثنا می اندازند. اشیایی که از یک نوع مشتق شده مشخص میباشند را میتوان با دور زدن RTTI و بررسی نوع زمان اجرا ایمن به آن ریخت ، بنادانشگاهن فقط در صورتی باید از این مورد استفاده علمی کاربردی که برنامهنویس کاملاً مطمئن برای که بازیگران معتبر هستم و همیشه معتبر خواهند خلاصه. static_castdynamic_cast
توابع عضو مجازی
معمولاً، وقتی تابعی در یک کلاس مشتق شده ، تابعی در کلاس پایه را لغو لینک ، تابعی که باید فراخوانی علمی کاربردی با نوع شی تعیین علمی کاربردی. یک تابع معین زمانی لغو علمی کاربردی که تفاوتی در تعداد یا نوع پارامترها بین دو یا چند تعریف از آن تابع وجود نمشکل برای. از این رو، در زمان کامپایل، تنها با توجه به یک اشاره گر کلاس پایه، ممکن است امکان تعیین نوع شی و بنادانشگاهن تابع صحیح دانشگاه فراخوانی وجود نمشکل برای. بنادانشگاهن تصمیم به زمان اجرا موکول علمی کاربردی. به این امر اعزام پویا می گویند . توابع یا روش های عضو مجازی [72]اجازه استاد تا خاص ترین پیاده سازی تابع، با توجه به نوع زمان اجرا واقعی شی، فراخوانی علمی کاربردی. در پیاده سازی های C++، این معمولاً با استفاده از جداول توابع مجازی مشکل علمی کاربردی . اگر نوع شی مشخص برای، ممکن است با اضافه کردن یک نام کلاس کاملاً واجد شرایط قبل از فراخوانی تابع، از این موضوع دور زده علمی کاربردی، اما به طور کلی فراخوانیهای توابع مجازی در زمان اجرا حل میشوند.
علاوه بر عملکردهای عضو استارا، اضافه بارهای اپراتور و تخریب کننده ها می توانند مجازی باشند. یک قانون غیر دقیق مبتنی بر تجربه عملی بیان لینک که اگر هر عملکردی در کلاس مجازی است، تخریب کننده نیز باید برای. از آنجایی که نوع یک شی در زمان ایجاد آن در زمان کامپایل مشخص است، سازندهها و سازندههای کپی پسوند نمیتوانند مجازی باشند. با این وجود، زمانی که یک اشاره گر به یک شی مشتق شده به عنوان یک اشاره گر به یک شی پایه ارسال علمی کاربردی، ممکن است شرایطی ایجاد علمی کاربردی که یک کپی از یک شی باید ایجاد علمی کاربردی. در چنین حالتی، یک راه حل رایج ایجاد یک تابع مجازی (یا مشابه) است که در هنگام فراخوانی، یک کپی از کلاس مشتق شده ایجاد کرده و برمی گرداند. clone()
یک تابع عضو را نیز می توان با ضمیمه کردن آن با پس از پرانتز بسته و قبل از نقطه ویرگول، “مجازی مجازی” کرد. کلاسی که حاوی یک تابع مجازی خالص برای، کلاس انتزاعی نامیده علمی کاربردی . اشیاء را نمی توان از یک کلاس انتزاعی ایجاد کرد. آنها فقط می توانند از آنها مشتق شوند. هر کلاس مشتق شده تابع مجازی را به صورت خالص به ارث می برد و باید یک تعریف غیر خالص از آن (و سایر توابع مجازی خالص دیگر) قبل از ایجاد اشیاء کلاس مشتق شده ارائه استاد. برنامه ای که سعی لینک یک شی از یک کلاس را با یک تابع عضو مجازی خالص یا تابع عضو مجازی خالص به ارث برده ایجاد لینک، مشکل بدی را. = 0
عبارات لامبدا
C++ از توابع ناشناس پشتیبانی لینک که به عبارات لامبدا نیز معروف جزوه برنامه نویسی شبکه، با مشکل زیر: [73]
[ capture ]( پارامترها ) -> return_type { function_body }
از C++20، میتوانید پارامترهای الگو را روی لامبدا بدون کلمه کلیدی بنویسید : template
[ ضبط ] < template_parameters > ( پارامترها ) -> return_type { function_body }
اگر لامبدا هیچ پارامتری دریافت نلینک و هیچ نوع بازگشتی یا سایر مشخصکنندهها استفاده نعلمی کاربردی، () را میتوان حذف کرد، یعنی:
[ مشکلبرداری ] { function_body }
نوع برگشتی یک عبارت لامبدا را می توان به طور خودکار استنباط کرد، در صورت امکان، به عنوان مشکل:
[]( int x , int y ) { return x + y ; } // استنتاج شد []( int x , int y ) -> int { return x + y ; } // صریح
لیست از تعریف بسته شدن پشتیبانی لینک . چنین عبارات لامبدا در استارا به عنوان قند نحوی دانشگاه یک شی تابع بی نام تعریف شده است . [capture]
رسیدگی به استثناء
مدیریت استثنا دانشگاه ارتباط وجود یک ممشکل یا خطا در زمان اجرا از جایی که شناسایی شده تا جایی که ممشکل قابل رسیدگی است استفاده علمی کاربردی. [74] این اجازه استاد تا این کار به صورت یکنواخت و جدا از کد اصلی مشکل علمی کاربردی، در حالی که همه خطاها را شناسایی لینک. [75] اگر خطایی رخ استاد، یک استثنا پرتاب علمی کاربردی (بالا میرود)، که سپس توسط نزدیکترین کنترلکننده استثنای مناسب دستگیر علمی کاربردی. استثنا باعث علمی کاربردی که محدوده فعلی خارج علمی کاربردی، و همچنین هر محدوده بیرونی (تکثیر) تا زمانی که یک کنترل کننده مناسب پیدا علمی کاربردی، به نوبه خود تخریب کنندگان هر شیء را در این محدوده های خارج شده فرا می خواند. [76] در همان زمان، یک استثنا به عنوان یک شی ارائه علمی کاربردی که داده های مربوط به ممشکل شناسایی شده را حمل لینک. [77]
برخی از راهنماهای سبک C++، مانند گوگل، [78] LLVM، [79] و Qt [80] استفاده از استثناها را ممنوع میکنند.
کد ایجاد استثنا در داخل یک بلوک قرار می گیرد. جزوه برنامه نویسی شبکه در بلوک های جداگانه (هندلرها) مدیریت هستم. هر بلوک دارد چندین کنترل کننده استثنا مشکل برای، همانطور که در مشکل زیر قابل مشاهده است. [81]trycatchtry
#include <iostream>
#include <بردار>
#include <stdexcept>
int main () {
امتحان کن {
std :: vector < int > vec { 3 , 4 , 3 , 1 };
int i { vec . در ( 4 )}; // یک استثنا پرتاب لینک، std::out_of_range (شاخص سازی دانشگاه vec از 0-3 است نه 1-4)
}
// یک کنترل کننده استثنا، std::out_of_range را می گیرد که توسط vec.at(4) پرتاب علمی کاربردی.
catch ( std :: out_of_range & e ) {
std :: cerr << “دسترسی به عنصری که وجود را: ” << e . what () << ‘\n’ ;
}
// دانشگاه گرفتن سایر استثناهای کتابخانه استارا (آنها از std::exception مشتق هستم)
catch ( std :: استثنا و e ) {
std :: cerr << “Exception انداخته شد: ” << e . what () << ‘\n’ ;
}
// همه استثناهای ناشناخته را بگیرید (یعنی مواردی که از std::exception مشتق نهستم)
گرفتن (…) {
std :: cerr << “خطای مرگبار \n ” ;
}
}
همچنین می توان استثناها را به صورت هدفمند با استفاده از کلمه کلیدی مطرح کرد. این استثنائات به روش معمول رسیدگی علمی کاربردی. در برخی موارد، به دلایل فنی نمی توان از استثناها استفاده کرد. یکی از این نمونه ها یک جزء حیاتی از یک سیستم تعبیه شده است، که در آن هر عملیات باید تضمین علمی کاربردی که در مدت زمان مشخصی تکمیل علمی کاربردی. این را نمی توان با استثنا تعیین کرد زیرا هیچ ابزاری دانشگاه تعیین حداکثر زمان لازم دانشگاه رسیدگی به یک استثنا وجود را. [82]throw
برخلاف مدیریت سیگنال ، که در آن تابع هندلینگ از نقطه شکست فراخوانی علمی کاربردی، مدیریت استثنا قبل از وارد شدن بلوک catch از محدوده فعلی خارج علمی کاربردی، که ممکن است در تابع فعلی یا هر یک از فراخوانیهای تابع قبلی در حال حاضر در پشته قرار مشکل برای.

انواع برشمرده شده
این بخش گزیده ای از نوع Enumerated § C++ است. [ ویرایش ]
C++ دارای انواع enumeration است که مستقیماً از C به ارث برده شدهاند و عمدتاً مانند اینها کار میکنند، با این تفاوت که enumeration یک نوع واقعی در C++ است که بررسی زمان کامپایل را اضافه میلینک. همچنین (مانند ساختارها)، enumکلمه کلیدی C++ به طور خودکار با یک typedef ترکیب علمی کاربردی ، به طوری که به جای نامگذاری نوع enum name، به سادگی آن را نامگذاری دارد name. این را می توان در C با استفاده از typedef شبیه سازی کرد:typedef enum {Value1, Value2} name;
C++11 همچنین نوع دومی از شمارش را ارائه میلینک که به آن جزوه برنامه نویسی شبکه محدودهای میگویند . اینها از نظر نوع ایمن هستم: شمارشگرها به طور ضمنی به یک نوع عدد صحیح تبدیل نهستم. در میان چیزهای دیگر، این اجازه استاد تا جریان ورودی/خروجی دانشگاه نوع شمارش تعریف علمی کاربردی. یکی دیگر از ویژگیهای شمارشهای دامنهدار این است که شمارشگرها نشت نمیکنند، بنادانشگاهن استفاده از آن نیاز به پیشوند با نام شمارش را (مثلاً Color::Redدانشگاه اولین شمارشگر در مشکل زیر)، مگر اینکه از یک using enumاعلان (معرفی شده در C++20 ) استفاده شده برای. تا شمارش كنندگان را به محدوده فعلي وارد كند. یک شمارش محدوده با عبارت enum class(یا enum struct) مشخص علمی کاربردی. مثلا:
enum class Color { Red , Green , Blue };
نوع زیربنایی یک شمارش یک نوع انتگرال تعریف شده توسط پیاده سازی است که به اندازه کافی بزرگ است تا همه مقادیر شمارش شده را در خود جای استاد. لازم نیست کوچکترین نوع ممکن برای. نوع زیربنایی را می توان مستقیماً مشخص کرد، که امکان “اعلامیه های پیش رو” شمارش ها را فراهم لینک:
enum class رنگ : طولانی { قرمز , سبز , آبی }; // باید در اندازه و چیدمان حافظه با نوع ‘long’ enum class متناسب برای Shapes : char ; // اعلامیه فوروارد. اگر بعداً مقادیری تعریف شده باشند که در «char» جا نمیشوند، یک خطا است.
کتابخانه استارا
پیش نویس استارا “Working Paper” که به عنوان C++98 تایید شد. نیمی از اندازه آن به کتابخانه استارا C++ اختصاص یافت.
مقاله اصلی: کتابخانه استارا C++
استارا C++ از دو بخش تشکیل شده است: زبان اصلی و کتابخانه استارا. برنامه نویسان C++ در هر پیاده سازی اصلی C++ انتظار دومی را دارند [ شفاف سازی ] ; شامل انواع انبوه ( بردارها ، لیستها، نقشهها، مجموعهها، صفها، پشتهها، آرایهها، تاپلها)، الگوریتمها (یافتن، دانشگاه_هرک ، جزوه برنامه نویسی شبکه ، تصادفی_تصادفی ، و غیره)، امکانات ورودی/خروجی ( iostream ، دانشگاه خواندن و نوشتن به کنسول و فایل ها)، کتابخانه سیستم فایل، پشتیبانی محلی سازی، اشاره گرهای هوشمند دانشگاه مدیریت خودکار حافظه، پشتیبانی از بیان منظم ، چند رشته ایکتابخانه، پشتیبانی اتمی (اجازه دادن به یک متغیر دانشگاه خواندن یا نوشتن حداکثر توسط یک رشته در یک زمان بدون هیچ گونه هماهنگی خارجی)، ابزارهای زمانی (اندازه گیری، دریافت زمان جاری و غیره)، سیستمی دانشگاه تبدیل گزارش خطا که مشکل استاد. از استثناهای C++ در استثناهای C++، یک مولد اعداد تصادفی و یک نسخه کمی تغییر یافته از کتابخانه استارا C (دانشگاه مطابقت با سیستم نوع C++) استفاده دارد.
بخش بزرگی از کتابخانه ++C بر اساس کتابخانه قالب استارا (STL) است. ابزارهای مفید ارائه شده توسط STL شامل کانتینرهایی مانند مجموعه اشیاء (مانند بردارها و لیست ها )، تکرار کننده هایی است که دسترسی آرایه مانند به کانتینرها را فراهم لینک و الگوریتم هایی که عملیات هایی مانند جستجو و مرتب سازی را مشکل دارد.
علاوه بر این، (چند) نقشهها ( آرایههای انجمنی ) و (چند) مجموعهها ارائه شدهاند که همگی رابطهای سازگار صادر میکنند. بنادانشگاهن، با استفاده از الگوها می توان الگوریتم های عمومی را نوشت که با هر ظرف یا هر دنباله ای که توسط تکرار کننده ها تعریف شده است کار لینک. همانطور که در C، ویژگی های کتابخانه با استفاده از #include دستورالعمل دانشگاه گنجاندن یک هدر استارا قابل دسترسی است. کتابخانه استارا C++ 105 سرصفحه استارا را ارائه استاد که 27 مورد از آنها منسوخ شده است.
این استارا شامل STL است که در ابتدا توسط الکساندر استپانوف طراحی شده خلاصه که سال ها با الگوریتم ها و کانتینرهای عمومی آزمایش کرد. زمانی که او با C++ شروع کرد، سرمشکل زبانی را پیدا کرد که در آن امکان ایجاد الگوریتمهای عمومی (مثلاً مرتبسازی STL) وجود داشت که حتی بهتر از مثلاً Qsort کتابخانه استارا C عمل میکرد، به لطف ویژگیهای C++ مانند استفاده از inlining و کامپایل- زمان اتصال به جای نشانگرهای تابع. استارا به آن به عنوان “STL” اشاره نلینک، زیرا صرفاً بخشی از کتابخانه استارا است، اما این اصطلاح هنوز به طور گسترده دانشگاه متمایز کردن آن از بقیه کتابخانه استارا (جریان های ورودی/خروجی، بین المللی سازی، تشخیص، زیر مجموعه کتابخانه C و غیره). [83]
اکثر کامپایلرهای C++ و همه کامپایلرهای اصلی، پیاده سازی مطابق با را کتابخانه استارا C++ را ارائه دارد.
رهنمودهای اصلی C++
دستورالعملهای هسته C++ [84] ابتکاری است که توسط Bjarne Stroustrup، مخترع C++، و Herb Sutter، گردآورنده و رئیس گروه کاری C++ ISO، رهبری علمی کاربردی تا به برنامهنویسان کمک لینک تا با استفاده از بهترین شیوهها دانشگاه زبان، «C++ مدرن» بنویسند. را C++11 و جدیدتر، و دانشگاه کمک به توسعه دهندگان کامپایلرها و ابزارهای بررسی استاتیک دانشگاه ایجاد قوانینی دانشگاه کشف شیوه های برنامه نویسی بد.
هدف اصلی نوشتن کارآمد و پیوسته از نوع و منبع امن C++ است.
دستورالعمل های اصلی [85] در جزوه برنامه نویسی شبکه افتتاحیه در CPPCon 2015 اعلام شد.
رهنمودها با کتابخانه پشتیبانی راهنما (GSL)، [86] یک کتابخانه فقط سرصفحه ای از انواع و توابع دانشگاه پیاده سازی دستورالعمل های اصلی و ابزارهای جستجوگر ایستا دانشگاه اجرای قوانین دستورالعمل همراه است. [87]
سازگاری
دانشگاه دادن آزادی بیشتر به فروشندگان کامپایلر، کمیته را C++ تصمیم گرفت اجرای نامها ، مدیریت استثناها و سایر ویژگیهای خاص پیادهسازی را دیکته نلینک. نقطه ضعف این تصمیم این است که انتظار مشکل کد شی تولید شده توسط کامپایلرهای دارد ناسازگار برای. با این حال، تلاشهایی دانشگاه استاراسازی کامپایلرها دانشگاه ماشینها یا سیستمهای عامل خاص (به عنوان مشکل C++ ABI) وجود داشت، [88] اگرچه به نظر میرسد که اکنون تا حد زیادی رها شدهاند.
با سی
اطلاعات بیشتر: سازگاری C و C++
C++ اغلب به عنوان ابرمجموعه C در نظر گرفته علمی کاربردی، اما این کاملاً درست نیست. [89] اکثر کدهای C می توانند به راحتی در C++ به درستی کامپایل شوند، اما چند تفاوت وجود را که باعث علمی کاربردی برخی از کدهای C معتبر نامعتبر باشند یا در C++ متفاوت رفتار کنند. به عنوان مشکل، C اجازه استاد تا تبدیل ضمنی از انواع اشاره گر دیگر را مشکل استاد، اما C++ اجازه استاد (به دلایل ایمنی نوع). همچنین، C++ بسیاری از کلیدواژههای جدید مانند و را تعریف میلینک که ممکن است به عنوان شناسه (مثلاً نام متغیرها) در برنامه C استفاده شوند. void*newclass
برخی از ناسازگاری ها با تجدید نظر در سال 1999 استارا C ( C99 ) حذف شده اند، که اکنون از ویژگی های C++ مانند نظرات خط ( //) و اعلان های مخلوط با کد پشتیبانی لینک. از سوی دیگر، C99 تعدادی ویژگی جدید را معرفی کرد که C++ از آنها پشتیبانی نمی کرد و در C++ ناسازگار یا اضافی خلاصهند، مانند آرایه های با طول متغیر ، انواع اعداد مختلط بومی (با این حال، کلاس موجود در کتابخانه استارا C++ عملکرد مشابهی را ارائه لینک. ، اگرچه با کد سازگار نیست)، مقراهی اولیه، لفظ ترکیبی و کلمه کلیدی جزوه برنامه نویسی شی گرا شده است. [90] برخی از ویژگی های معرفی شده توسط C99 در نسخه بعدی استارا C++، C++11 گنجانده شد.std::complexrestrict(از آنهایی که زائد نخلاصهند). [91] [92] [93] با این حال، استارا C++11 ناسازگاریهای جدیدی را معرفی میلینک، مانند عدم تخصیص یک رشته تحت اللفظی به یک اشارهگر کاراکتر، که C معتبر باقی میماند.
دانشگاه ترکیب کد C و C++، هر اعلان یا تعریف تابعی که قرار است از C و C++ فراخوانی علمی کاربردی/استفاده علمی کاربردی، باید با پیوند C با قرار دادن آن در یک بلوک اعلام علمی کاربردی. چنین عملکردی ممکن است به ویژگیهای بسته به انحراف نام (یعنی بارگذاری بیش از حد تابع) وابسته نبرای. extern “C” {/*…*/}
انتقاد
مقاله اصلی: نقد C++
علیرغم پذیرش گسترده آن، برخی از برنامه نویسان برجسته زبان C++ را مورد انتقاد قرار داده اند، از جمله لینوس توروالدز ، [94] ریچارد استالمن ، [95] جاشوا بلوخ ، کن تامپسون [96] [97] [98] و دونالد کنوت . [99] [100]
یکی از مواردی که اغلب مورد انتقاد C++ قرار می گیرد پیچیدگی درک شده آن به عنوان یک زبان است، با این انتقاد که تعداد زیادی از ویژگی های غیر متعامد در عمل مستلزم محدود کردن کد به زیرمجموعه ای از C++ است، بنادانشگاهن از مزایای خوانایی سبک و اصطلاحات رایج اجتناب علمی کاربردی. . همانطور که توسط جاشوا بلوخ بیان شده است :
من فکر میکنم C++ بسیار فراتر از آستانه پیچیدگیاش خلاصه، و با این حال افراد زیادی هستم که آن را برنامهنویسی میکنند. اما کاری که شما مشکل می دهید این است که مردم را مجبور دارد آن را زیر مجموعه قرار دهند. بنادانشگاهن تقریباً هر فروشگاهی که من از ++C استفاده میلینک، میگوید: «بله، ما از C++ استفاده میکنیم، اما از ارث بری چند پیادهسازی استفاده نمیکنیم و از بارگذاری بیشازحد اپراتور استفاده نمیکنیم.» فقط یک سری ویژگی وجود را که شما از آنها استفاده دارد زیرا جزوه برنامه نویسی شبکه کدهای به دست آمده بسیار زیاد است. و من فکر نمی کنم زمانی که باید این کار را شروع دارد خوب نیست. شما این قابلیت حمل برنامه نویس را از دست می دهید که همه می توانند کد دیگران را بخوانید، که به نظر من چیز خوبی است.
Donald Knuth (1993، نظر در مورد C ++ از پیش استارا شده)، که در مورد Edsger Dijkstra گفت که “فکر کردن به برنامه نویسی در C ++” “او را از نظر جسمی بیمار لینک”: [99] [100]
ممشکلی که امروز با آنها دارم این است که… C++ خیلی پیچیده است. در حال حاضر، نوشتن کد قابل حملی که فکر می کنم روی بسیاری از سیستم های دارد کار لینک، غیرممکن است، مگر اینکه از همه ویژگی های عجیب و غریب اجتناب کنم. هر زمان که طراحان زبان C++ دو ایده رقیب در مورد اینکه چگونه باید ممشکلی را حل کنند داشتند، می گفتند “خوب، ما هر دو را مشکل خواهیم داد”. بنادانشگاهن زبان دانشگاه سلیقه من بیش از حد باروک است.
