Arvanttt

تند و سریع

Arvant

تند و سریع












ویژگی های جدید C++ 11:بخش سوم

چهارشنبه, ۱۱ دی ۱۳۹۲، ۱۲:۲۱ ب.ظ

Strongly-typed enums

در ++C قدیم اگر یک عضو داده enum با عضو دیگری در یک enum در همان حوزه هم نام باشد شاهد ایجاد خطا در زمان کامپایل برنامه می بودیم .برای حل این مشکل نوع داده جدید تحت عنوان Strongly - typed enums به زبان در استاندارد جدید اضافه شده است.

enum Animals {Bear, Cat, Chicken};
enum Birds {Eagle, Duck, Chicken}; // error! Chicken has already been declared!

enum class Fruits { Apple, Pear, Orange };
enum class Colours { Blue, White, Orange }; // no problem

()begin و  () end

دو عضو جدید STL برای بدست اوردن اولین عضو و اخرین عضو ساختمان داده های مرسوم 

Example

#include <iostream>
#include <vector>
#include <iterator>
 
int main() 
{
    std::vector<int> v = { 3, 1, 4 };
    auto vi = std::begin(v);
    std::cout << *vi << '\n'; 
 
    int a[] = { -5, 10, 15 };
    auto ai = std::begin(a);
    std::cout << *ai << '\n';
}

Output:

3
-5

static_assert

static_assert مکانیزمی جهت اعتبار سنجی داده ها در هنگام کامپایل برنامه است که در صورتی که نوع مشخص شده همان نوع مورد انتظار باشد که هیچ در غیر این صورت کامپایل با استفاده از پیغامی که مشخص کردید مطلب را به شما اعلان می دارد. این مورد می تواند در توابعی که از Template ها استفاده می کنند کاربردی باشد .

template <typename T, size_t Size>
class Vector
{
   static_assert(Size < 3, "Size is too small");
   T _points[Size];
};

int main()
{
   Vector<int, 16> a1;
   Vector<double, 2> a2;
   return 0;
}
error C2338: Size is too small
see reference to class template instantiation 'Vector<T,Size>' being compiled
   with
   [
      T=double,
      Size=2
   ]

اشاره گر های هوشمند:

موضوع اشاره گر ها همیشه یکی از موضوعات اصلی در برنامه نویسی  ++C بوده است .این امکان (اشاره گرها) همانقدر که می توانند قدرمند باشند می توانند در صورت استفاده نادرست باعث هدر رفت و ایجاد حافظه هرز گردد .در واقع شما مسئول هر آنچه در حافظه رخ خواهد داد هستید و هر چقدر که حافظه که از اسیستم دریافت کرده اید باید در زمان عدم نیاز به سیستم بازگردانید .این مکانیزم برای برنامه نویسی سیستمی بسیار حیاتی است .البته از دیرباز برنامه نویسان سعی در بهبود این مکانیزم نموده اند و با طراحی کلاس های اختصاصی سعی در هوشمند کردن این اشاره گر ها نموده اند .

در C++ 11 با ایجاد چند کلاس سعی در هوشمند سازی اشاره گر ها شده است  تا کاربر دغدغه خاصی از بابت این اشاره گر ها نداشته باشند که البته استفاده از این شیوه مدیریتی حافظه در فروم اصلی cocos2d-x در حال بحث است و تعدادی از کاربران با ارائه مستندات بر این نکته پا فشاری می کنند که استفاده از همان شیوه به استلاح(objective c pattern) و استفاده از autorelase بیشتری می تواند کار ساز باشد و بازدهی بالاتری خواهد داشت  .

اما در کل 11 ++C با طراحی سه کلاس shared_ptr و unique_ptr و weak_ptr سعی در بهبود مدیریت اتوماتیک حافظه نموده است .

shared_ptr : هیچ کدام از ارجاعات به حافظه مالک اصلی حافظه نیستند و با از بین رفتن اخرین ارجاع فضا به سیستم باز خواهد گشت .

 unique_ptr : هر ارجاع مسئول حافظه مورد استفاده است و با از بین رفتن ارجاع حافظه مورد استفاده نیز ازاد سازی خواهد شد .

پایان :

در پایان باید عرض کنم که تغیرات استاندارد جدید ++C  به مراتب بیشتر از مواردی است که عرض شد و در اینجا فقط یک دید کلی از تغیرات و امکانات اضافه شده جدید ارائه گردید چه بسا بسیاری از این مباحث خود نیازمند مطلبی ویژه و مفصل باشد ولی در اینجا در قالب چند پاراگراف ارائه گردید است  .در جمع آوری این مطالب نیز از منابع متفاوتی استفاده شده است و اگر هم در جایی حاوی اشتباهی بود خوشحال میشم نظر خواننده محترم را داشته باشم .

  • موافقین ۰ مخالفین ۰
  • چهارشنبه, ۱۱ دی ۱۳۹۲، ۱۲:۲۱ ب.ظ
به اشتراک می گذارم : به اشتراک بگذاریم به اشتراک بگذاریم به اشتراک بگذاریم به اشتراک بگذاریم

نظرات  (۱)

بهترین ترجمه clrs چیه ؟؟؟
پاسخ:
والله من ترجمه خاصی سراغ ندارم .ولی در صورت علاقه مندی و مشکلی نداشتن با زبان انگلیسی پیش نهاد می کنم در دوره اشنایی با الگوریتم سایت www.coursera.org شرکت کنید که در دو دوره برگزار میشه پارت اولش تقریباَ از بیست روز دیگه شروع میشه :) مرجعشونم کتاب  Algorithms نوشته Robert Sedgewick, Kevin Wayne ولی یکم جاوا بدونید بهتره :) پارت دومشم که بخش دومشه فکر کنم یه دو ماه دیگست