رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'c++11'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


وبلاگ‌ها

چیزی برای نمایش وجود ندارد

چیزی برای نمایش وجود ندارد

تالارهای گفتگو

  • انجمن‌های آی او استریم
    • اخبار و اعلامیه‌های سایت
    • اسناد و قوانین مرجع
    • رویداد‌ها و جلسات
    • معرفی محصولات نوشته شده‌ بومی
    • مرکز نظرسنجی جامعه‌ی برنامه‌نویسان
    • مقالات و اسناد مشاوره‌ای
    • مرکز چالش برانگیز برنامه‌نویسان
    • رمز‌های موفقیت
    • ابزار‌ها و نرم‌افزارهای کاربردی برنامه‌نویسان حرفه‌ای
  • استارتاپی و کسب‌و‌کار
    • استارتاپ‌ها
    • سرمایه گذاری
    • شتاب دهنده‌ها
    • پارک‌های علم و فناوری و مراکز رشد
    • مصاحبه با استارت‌آپ‌ها
    • قوانین حقوقی
    • داستان‌های موفقیت
    • کارآفرینان و متخصصین
    • مشاوره اجرای کسب‌وکار
    • اخبار حوزه‌ی استارتا‌پی
    • آگهی‌های استخدامی
  • زبان‌های برنامه نویسی
    • برنامه نویسی در C و ‏++C
    • برنامه نویسی با Java
    • برنامه نویسی با JavaScript
    • برنامه نویسی با Go
    • برنامه نویسی با Python
    • برنامه نویسی با Delphi
    • برنامه نویسی با Ruby
    • برنامه نویسی با VB6
  • طراحی و توسعه وب
    • برنامه نویسی در PHP
    • برنامه نویسی با Node.JS
  • طراحی و توسعه وب اپلیکیشن‌ها
    • طراحی و توسعه در Angular
    • طراحی و توسعه در React.JS
    • طراحی و توسعه در Vue.JS
  • طراحی و توسعه موبایل و اِمبِد‌ها و تلوزیون‌ها
    • برنامه نویسی تحت محصولات اپل
    • برنامه نویسی تحت محصولات گوگل
    • طراحی و توسعه تحت محصولات دیگر
  • برنامه‌نویسی سطح پایین و سیستم عامل‌ها
    • سیستم عامل‌های آزاد
    • سیستم عامل‌های تجاری
    • مباحث آموزشی مرتبط با سیستم‌عامل
  • شبکه و اینترنت
    • مباحث و منابع آموزشي
    • سوالات و مشکلات
  • بانک‌های اطلاعاتی
    • پایگاه داده MySQL
    • پایگاه داده PostgreSQL
    • پایگاه داده SQLite
    • پایگاه داده MongoDB
    • پایگاه داده SQL Server
    • دیگر پایگاه‌های داده
  • برنامه نویسی تحت محصولات اپل
  • برنامه نویسی تحت محصولات مایکروسافت
  • طراحی و توسعه تجربه کاربری (UX) و رابط کاربری (UI)
  • درخواست انجام پروژه (ویژه)
  • سوالات و مباحث عامیانه
  • سطل آشغال

Product Groups

  • کتاب‌ها و مقالات آموزشی

دسته ها

  • علمی
  • استارتاپی
  • برنامه‌نویسی
    • زبان‌های برنامه نویسی
    • معماری‌ها
  • کامپایلر و مفسر
  • محیط‌های توسعه
  • پلتفرم‌های توسعه
  • مجوز‌های نرم‌افزاری
  • فناوری‌ها
    • پردازش تصویر
    • اینترنت اشیاء
    • پردازش ابری (Cloud Computing)
    • چند سکویی (Cross-Platform)
    • بیگ دیتا (Big Data)
    • هوش مصنوعی (AI)
    • سخت افزار
    • نرم‌افزار و اپلیکیشن
    • اینترنت و شبکه
    • رمزنگاری
    • امبد‌ها (Embedded)
  • طراحی
    • تجربه کاربری
    • رابط کاربری

دسته ها

  • عمومی
  • گرافیکی
  • شبکه و ارتباطات

دسته ها

  • کامپایلر‌ها
  • محیط‌های توسعه
  • کتابخانه‌ها
  • ماژول‌ها و پلاگین‌ها
  • محصولات بومی
  • کتاب‌ها و مقالات
  • زبان‌ها و ابزار‌ها
  • طراحی و گرافیک

جستجو در ...

نمایش نتایجی که شامل ...


تاریخ ایجاد

  • شروع

    پایان


آخرین بروزرسانی

  • شروع

    پایان


فیلتر بر اساس تعداد ...

تاریخ عضویت

  • شروع

    پایان


گروه


درباره من


شماره تلفن همراه


شناسه گیت‌هاب


شناسه لینکدین


شناسه پیام رسان


شهر


آدرس پستی

1 نتیجه پیدا شد

  1. با سلام همانطور که میدانید زبان سی پلاس پلاس در سالهای اخیر تغییرات شگرف و چشمگیری نسبت به سالهای اولیه پیدایش این زبان داشته است ، به طوریکه کسانی که از استاندارد های قدیمی این زبان استفاده میکنند همگی اذعان دارند که تا چند سال آینده در صورتی که از تکنیک های اضافه شده جدید به این زبان استفاده نشود و آموزش مناسبی برای این تکنیک ها دیده نشود به طور قطع به یقین نمی توان ادعا داشت که زبان سی پلاس پلاس را بلد هستیم و قادر به تولید نرم افزارهایی با قابلیت نگهداری بالاتر و مقایس پذیر تر و با قابلیت استفاده مجدد بالاتر نخواهیم بود. در صورتی که هیچ آشنایی با این سطح از تغییرات در زبان سی پلاس پلاس را ندارید، پیشنهاد میکنم مقاله دوست عزیزم جناب اسدازاده را از این لینک قابلیت‌های ممتاز ++C در نسخه‌های ۱۱ و ۱۴ و ۱۷ حتما مطالعه نمایید. در این آموزش قصد داریم که نحوه استفاده از تکنیک های جدید زبان را باهم استفاده کنیم و در صورتی که دوستان نظری راجع به این مثالها و این آموزش داشتند حتما خوشحال خواهیم شد که به ما در این مهم کمک کنید تا بتوانیم سهمی هرچند کوچک در گسترش بهتر این زبان داشته باشیم. قبلا از تمامی دوستان و اعضای محترمی که این آموزش را مطالعه میکنند و به ما کمک میکنند کمال تشکر و قدر دانی را دارم. استفاده از کلاس std::launder اشاره به آدرس یک زیر شی Sub Object در یک مجموعه، به طور مثال اگر یک struct ویک union به این صورت تعریف کنیم struct X { const int n; }; union U { X x; }; حال اگر یک شی بدین صورت تعرف کنیم... U u = {{ 1 }}; اکنون در صورتی که بخواهید از مقدار عضو n که در X تعریف شده است، توسط شی u دسترسی داشته باشیم بدون اینکه شی جدیدی از X ساخته باشیم به روش زیر عمل خواهیم کرد. X *p = new (&u.x) X {2}; اکنون اشاره گری خواهیم داشت که به یک عضو از U اشاره خواهد داشت، بنابراین نتیجه عبارت ادعایی زیر هم درست خواهد بود. assert(p->n == 2); // OK اکنون اگر عبارتی ادعایی به شکل زیر داشته باشیم قطعا یک undefined Behaviour خواهیم داشت ، بدین علت که احتمال این وجود دارد که نتوان به شی sub Object اشاره داشته باشیم. assert(u.x.n == 2); ودرنهایت در C++17 با استفاده از کلاس std::launder می توانید چنین دسترسی داشته باشید که هم ایمن هست و قطعا قابلیت استفاده مجدد بهتری هم به ارمغان خواهد آورد. assert(*std::launder(&u.x.n) == 2); // OK استفاده از کلاس std::cref , std::ref جهت دسترسی به متغیر های کلاس حافظه ای (Automatic) تعریف شده در یک تابع که به صورت Call By Reference در زمان استفاده از کلاس استاندارد std::function. به فرض مثال، تصور کنید که چند متغیر از نوع int دارید و بطور پیش فرض در زمان تعریف مقادیر اولیه ثابتی هم برای این متغییرها در نظر گرفته ایم و اکنون قصد استفاده از این متغیرها در یک تابع را داریم. اکنون اگر با استفاده از کلاس std::function یک اشاره گر به تابع بسازید و با استفاده از کلاس کمکی std::bind پارامترها مناسب را هم به تابع خود ارسال نمایید، در صورتی که در امضای تابع خود درج کرده باشید که مقادیر ورودی با ارجاع باشند، در زمان فراخوانی تابع شما به مقادیر اولیه تعریف شده در متغییرها دسترسی خواهید داشت. اکنون تصور کنید که بعد از اینکه با استفاده از کلاس std::bind پارامترها را به اشاره گر تابع مقادیر جدید برای متغیرها تعریف کرده باشید، در اینصورت اگر بازهم تابع خود را فراخوانی کنید مشاهده خواهید کرد که فقط به مقادیر اولیه در زمان تعریف متغیر ها دسترسی خواهید داشت و مقادیر جدید متغیرها در دسترس تابع قرار ندارند. اکنون برای رفع این اشکال معمولا دو اه حل وجود دارد... 1- بلافاصله بعد ازتغییر مقادیر متغیرها با استفاده از کلاس std::bind مجددا پارامترها را برای اشاره گر تابع تعریف کنید، که در اینصورت اگر 100 بار مقداردهی مختلف داشته باشید از نظر منطقی و بازدهی کار درستی هست که 100 بار از std::bind استفاده کنید؟ 2- از کلاس های std::ref برای داده های غیر ثابت و std::cref برای داده های ثابت می توانید استفاده کنید. اکنون همانطور که در مثال زیر مشاهده میکنید، در زمان تعریف متغیرهای عددی مقداری برای آنها تعریف کرده ایم و بعد با استفاده از std::bind , std::function یک اشاره گر به تابع ساخته ایم که از سه پارامتر این تابع یک پارامتر رابا استفاده از رفرنس معمولی ارسال کرده ایم و دو پارامتر را با استفاده از کلاسهای std::ref , std::cref ارسال کرده ایم، ودر مرحله بعد مقادیر متغیرها را تغییر داده ایم همانطور که انتظار داشتیم در بدنه تابع تعریف شده مقدار متغیر n با مقدارپیش فرض در دسترس خواهد بود، و قطعا تغییراتی که بر روی این متغیر لحاظ شود را نخواهد دید، نکته ای که در دوپارامتر بعدی مشاهده نمی شود. بنابراین در صورتی که نیاز به تغییر مقادیر متغیر های ارسالی به توابع را در خارج از حوزه دید تابع مورد نظر خود را دارید، و حتما هم لازم هست که تابع شما هم این تغییرات را در دسترس خود داشته باشد باید از کلاس های std::ref , std::cref استفاده نمایید. #include <functional> #include <iostream> void f(int& n1, int& n2, const int& n3) { std::cout << "In function: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; ++n1; ++n2; // ++n3; } int main() { int n1 = 1, n2 = 2, n3 = 3; std::function<void()> bound_f = std::bind(f, n1, std::ref(n2), std::cref(n3)); n1 = 10; n2 = 11; n3 = 12; std::cout << "Before function: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; bound_f(); std::cout << "After function: " << n1 << ' ' << n2 << ' ' << n3 << '\n' << '\n'; n1 = 13; n2 = 14; n3 = 15; std::cout << "Before function: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; bound_f(); std::cout << "After function: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; return 0; } این آموزش ادامه خواهد داشت....
×
×
  • جدید...