Arvanttt

تند و سریع

Arvant

تند و سریع












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

سه شنبه, ۲۶ آذر ۱۳۹۲، ۱۱:۳۵ ق.ظ

auto

تا قبل از 11++C شما مجبور به مشخص کردن نوع متغیر در حین تعریف متغیر بودید اما در استاندارد جدید این وظیفه را می توان بر عهده کامپایلر گذاشت که نسبت به تعیین نوع متغیر اقدام نماید .این نوع تعریف متغیر از کارایی و دقت نوع کلاسیک آن برخوردار بوده و کد نویسی را نیز اسان تر می کند شاید به نظر استفاده از int به جای atuo در نگاه اول ساده تر باشد اما در هنگام کار با انواع داده مختلفی که در کتابخانه استاندارد وجود دارد و بعضی کاربرد های دیگر استفاده از این شکل تعریف متغیر بسیار کاراست.

auto i = 42;        // i is an int
auto l = 42LL;      // l is an long long
auto p = new foo(); // p is a foo*

 شاید برای بعضی به اشتباه این نوع تعریف با مفهوم متغیر های داینامیک که در زبان های اسکریپتی وجود دارد همسان به نظر بیاید ولی از این خبر ها نیست و شما قادر به تغیر نوع پس از تعریف متغیر نیستید .

چند مثال کاربردی تر در استفاده همراه سایر ساختار های داده ای :

std::map<std::string, std::vector<int>> map;
for(auto it = begin(map); it != end(map); ++it) 
{
}

البته نمی توان از auto به عنوان نوع داده بازگشتی یک تابع به صورت مستقیم استفاده کرد .اما می توان auto را به عنوان نوع بازگشتی استفاده کرده و در اعلان برنامه مشخص نمود که نوع بازگشتی تابع در اصل از چه نوع داده ای است (با استفاده از decltype)

template <typename T1, typename T2>
auto compose(T1 t1, T2 t2) -> decltype(t1 + t2)
{
   return t1+t2;
}
auto v = compose(2, 3.14); // v's type is double

 nullptr

در زبان C و ++C عبارت NULL بیانگر مقدار 0 بود و از آن برای مشخص کردن اشاره گر های که به جای خاصی اشاره نمی کنند و اشیای که فاقد داده هستند استفاده می شود در استاندارد جدید با استفاده از کلمه کلیدی nullptr می توان همین عمل را انجام داد ولی باید توجه داشت که NULL یک نوع داده صحیح و nullptr به صورت بولین تعریف شده است 

void foo(int* p) {}

void bar(std::shared_ptr<int> p) {}

int* p1 = NULL;
int* p2 = nullptr;   
if(p1 == p2)
{
}

foo(nullptr);
bar(nullptr);

bool f = nullptr;
int i = nullptr; // error: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type

پیمایش ساختار های داده ای با استفاده از for به صورت ساده تر:

for each جزو دستوراتی است که در حال حاظر اکثر زبان های برنامه نویسی برای استفاده از ساختار های داده ای مانند ارایه ها و ... از آن استفاده می کنند که در استاندارد جدید ++C هم راهی برای استفاده و پیمایش راحت تر این ساختار ها با استفاده از همان دستور for در نظر گرفته است که کار با ساختار های داده ای که در ان خیلی با ایندکس کار نداریم را راحت تر کرده است

std::map<std::string, std::vector<int>> map;
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
map["one"] = v;

for(const auto& kvp : map) 
{
  std::cout << kvp.first << std::endl;

  for(auto v : kvp.second)
  {
     std::cout << v << std::endl;
  }
}

int arr[] = {1,2,3,4,5};
for(int& e : arr) 
{
  e = e*e;
}

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

نظرات  (۳)

Salam .
یه سوال : به چه کسابنی توصیه میکنین که برن علوم کامپیوتر؟؟؟
پاسخ:
کسی که بیشتر از برنامه نویسی علاقه مند به حل مسائل پیچیده الگوریتمی و ریاضی است .شما تو رشته نرم افزار بیشتر با کامپایلر و زبان های برنامه نویسی و الگوریتم های سر و کار دارید که در باره حل مسائل مربوط به طراحی یک نرم افزار است .ولی تو درس علوم کامپیوتر خیلی خیلی جنبه تئوری بالاست و تعداد واحد های ریاضیاتی اونا خیلی بیشتر از رشته های نرم افزار هستش .رشته علوم کامپیوتری جزو رشته های علوم پایه محسوب میشه .در کل به قول یکی از بچه ها پدر کامپیوتر الکترونیک و مادرش ریاضیه اگه می خوای تا اون عمق از کامپیوتر جلو بری رشته علوم کامپیوتر خوبه :)
ممنون از پاسختون .. 
به نظر شما بازار کارش چطوره؟؟
پاسخ:
در کل اگه تو ایران با مهندسای نرم اقزار تقریباَ یه بازار کار دارن .ولی در اصل باید یه پله بالاتر از مهندس نرم افزار و برنامه نویسا باشن یعنی باید در اصل به عنوان مدیر پروژه یا ناظر تو پروژه های بزرگ وظیفشون خورد کردن الگوریتما برای بخش های مختلف سیستم و یه چیزی تو همین مایه ها باشه.ولی در کل تو ایران زیاد بین معماری کامپیوتر و علوم کامپیوتر و  هوش مصنوعی و نرم افزار گاهاَ تفاوت شغلی وجود نداره تو ایران بیشتر مدیر پروژه هاشونم حتماَ باید خدای برنامه نویسی باشن و .... و خیلی کاری به سایر توانایی ها ندارن .برنامه نویسی هم که اگه بخوای بکنی که دیگه زیاد در گیر رشته نیستن برنامه نویسیت خوب باشه همه جا تحویلت میگرن .تو استخدامی ها رو دیگه نمی دونم زیاد پیگیری نکردم.
سلام 
برای یادگیری سی ++11 منبع آموزش فارسی سراغ دارید؟
کتاب انگلیسی یا فارسی در این مورد برای دانلود میذارید؟
با تشکر
پاسخ:
سلام
کتاب فارسی تو اینترنت که ندیدم از نسخه چاپ شده هم اطلاعی ندارم
ولی یه کتاب مقدس خارجی سراغ دارم

http://www.amazon.com/Professional-C-Marc-Gregoire/dp/0470932449