ru
Feedback
C++

C++

Открыть в Telegram

گروه آموزش زبان برنامه نویسی سی، سی پلاس پلاس خدمت شما دوستداران گرامی با امید بهره بردن و موفقیت شما همراهان🌹 ممنون که همراه ما میشین و ما رو حمایت میکنین 🌹 https://t.me/ourcpp

Больше
2 130
Подписчики
-224 часа
-57 дней
-4730 день
Архив постов
C++
2 130
👨‍🏫آموزش standard template library (STL) 🔘بخش اول ➖قسمت ۱/۲ منبع:Linkedin مدرس:Bill Weinman #آموزش #stl 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش standard template library (STL) مدرس: Bill Weinman منبع: Linkedin سطح: متوسط توضیحات: کتابخانه استاندارد الگو (SLT
👨‍🏫آموزش standard template library (STL) مدرس: Bill Weinman منبع: Linkedin سطح: متوسط توضیحات: کتابخانه استاندارد الگو (SLT) یکی از کامل ترین و قدرتمند ترین کتابخانه های موجود در مورد Container است. برای دستیابی به مهارت در C++، داشتن درک صحیح از الگو های های C ++ و STL هر دو ضروری می باشد. در این دوره، که دومین سری از تمرکز بر ضروریات C++ می باشد، مدرس بررسی دقیقی بر روی هر دو موضوع ضروری ذکر شده دارد. در شروع دوره، او الگو ها را آموزش می دهد و در مورد نحو الگو ها، کلاس ها، توابع و ویژگی جدید argument deduction بحث می کند. سپس او بر مبنای دانش بدست آمده از بخش شروع دوره، در مورد در برگیرنده های SLT، تکرار کننده ها، تبدیل کننده ها، توابع، و الگوریتم ها بحث می کند. 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
#challenge #memory_layout #c02 چالش: مشکل کد زیر چیست؟
struct my_type final {
  int int_value;
  double double_value;

  my_type(int const i, double const d) 
    : double_value(d), int_value(i) 
  { }
};

C++
2 130
من در تلاش برای دیباگ پروژه😕 باگ: #fun
من در تلاش برای دیباگ پروژه😕 باگ: #fun

C++
2 130
#challenge_answer #c01 جواب چالش Referenceها. این کد Undefined Behavior هست. چرا که ما توی تابع f_1 با فراخوانی std::map::erase باعث خراب شدن Iteratorها شدیم. امّا چیزی که مشکل اصلی رو درست می‌کنه اینکه ما یک const-reference به کلید یکی از عناصر Map فرستادیم به تابع. پس یعنی وقتی‌که اون Iteratorها خراب می‌شند دیگه اون const-reference هم مقدارش Valid نیست و خرابه. متأسفانه این کد در اکثر مواقع می‌تونه درست عمل بکنه، امّا اگه با Address Sanitizer برنامه‌امون رو اجرا بکنیم؛ یه همچین خطایی می‌گیریم:
ERROR: AddressSanitizer: heap-use-after-free on address

C++
2 130
#challenge #reference #c01 چالش: آیا این کد مشکلی دارد؟
std::map<std::string, int> map = {
  {"_1", 1}, {"_2", 2}
};

void f_2(std::string const& i) {
  std::cout << "Key: " << i << std::endl;
}
void f_1(std::string const& i) {
  map.erase(i);
  f_2(i);
}

int main() {
  while (!map.empty()) {
    f_1(map.begin()->first);
  }
}
------------------ جهت اجرا کردن: https://wandbox.org/permlink/KfQkd9cxkQbyqXUc

C++
2 130
#tips #effective_modern_cpp #enumerations همیشه استفاده از Scoped Enumerationها رو به استفاده از Unscoped Enumerationها ترجیح بدید. در سی‌پلاس‌پلاس استاندارد ۱۱ قابلیّت Scoped Enumerationها اضافه شد که بر خلاف Unscopedها در جایی که تعریف شدند به‌صورت گلوبال نمی‌تونستیم ازشون استفاده بکنیم و حتماً باید محدوده‌اشون (Scope)‌ رو مشخص می‌کردیم و همچنین قابلیّت Explicit Casting هم ندارن. با Unscoped Enumerationها خیلی راحت می‌تونستیم یک همچین خطایی بکنیم:
enum types { number, string };
bool number = false;
که کامپایلر به ما یک همچین خطایی میده:
error: ‘bool number’ redeclared as different kind of entity
چرا که قبلاً با استفاده از Unscoped Enumerationها ما number رو تعریف کردیم. امّا با Scoped Enumerationها یه همچین مشکلی رو نداریم:
enum class types { number, string };
bool number = false;
چرا که اینجا number توی محدوده types تعریف شده و برای استفاده ازش باید صریحاً محدوده رو مشخص بکنیم:
auto type = types::number;
برای جلوگیری از این خطاها و احترام به Strong Typing زبان سی‌پلاس‌پلاس استفاده از Scoped Enumerationها رو اولویت بدید؛ مگر اینکه دلیل خاصی برای استفاده از Unscoped Enumerationها داشته باشید. مثلاً نیاز به عملیات بیتی:
enum permissions {
  write = 1,
  read = 1 << 1,
  config = 1 << 2
};

auto perm = write | config;

if (perm & (1 << config)) {
  std::cout << "User Can Config" << std::endl;
}

C++
2 130
#tips #debugging #macro گرفتن گزارش دقیق با ماکروهای از پیش‌تعریف شده در هنگام Debug کردن، معمولاً از پیغام‌هایی استفاده می‌کنیم. برای اینکه این پیغام‌ها اطلاعات دقیق‌تری بتونند بهمون بدند؛ Preprocessor یک‌سری Macro از پیش‌تعریف شده داره که می‌تونند اطلاعاتی مانند: - شمارهٔ خط جاری. - اسم فایل. - اسم تابع. رو به ما بدند. • ماکرو شمارهٔ خط برای دریافت شمارهٔ خط می‌تونیم از ماکروی __LINE__ استفاده کنیم. • ماکرو اسم فایل برای دریافت اسم فایل‌جاری می‌تونیم از ماکروی __FILE__ استفاده کنیم. • ماکرو اسم تابع برای دریافت اسم تابع‌جاری می‌تونیم از ماکروهای: - __func__ - __FUNCTION__ استفاده بکنیم، منتهیٰ دو ماکرو دیگه هستند که دقیق‌تر به ما اسم تابع رو میدند: - __PRETTY_FUNCTION__ : Just for GCC - __FUNCSIG__ : Just for MSVC که با ترکیبی از این ماکروها، می‌تونیم Loggerهای خودمون رو درست بکنیم:
#ifdef _WIN32
  #define FUNC_NAME __FUNCSIG__
#elif defined(__unix__)
  #define FUNC_NAME __PRETTY_FUNCTION__
#else
  #define FUNC_NAME __func__
#endif
#define M_LOG \
  std::cerr << "[ " << __LINE__ << " : " << FUNC_NAME << " ] "
برای دیدن نحوهٔ استفاده: https://wandbox.org/permlink/FMi2uPI3cOSpTPSq ---------------- نکته: برای استفاده در پروژه‌های بزرگ، به خاطر اهمیّت Logها و نیاز به مدیریت بیشتر، به‌خصوص در برنامه‌های Multi-Thread؛ باید از کتابخونه‌های Logger جانبی استفاده بکنیم: - https://github.com/fffaraz/awesome-cpp#logging

C++
2 130
#tips #pointer_arithmetic هنگام استفاده از عملیات + یا - بر روی اشاره‌گرها، مراقب آدرس حافظه باشید. زمانی‌که ما یک حافظه‌ای را دستی دریافت می‌کنیم:
auto list = new int[10];
برای اینکه بتونیم دوباره این حافظه رو حذف بکنیم، نیاز به یک‌سری ساختاری در پس‌زمینه برای ذخیرهٔ اطلاعات مورد نیاز حافظهٔ گرفته شده هست؛ که اینکار توسط کتابخونهٔ استانداردی که استفاده می‌کنیم انجام میشه (مثلاً در سیستم‌عامل‌های استاندارد معمولاً یا glibc هست یا musl). یکی از این اطلاعات مهم، آدرسی هست که توابع Allocation مثل عملگر new یا تابع malloc به ما میده. خب چی میشه اگه این آدرس رو ما از دست بدیم؟ مسلماً دچار Memory Leak می‌شیم. یکی از روش‌هایی که این آدرس از بین میره، Pointer Arithmetic هست:
auto list = new int[10];
list += 3;
delete[] list;
اینجا چون ما از آدرسی که عملگر new بهمون داده بود، سه واحد جلو رفتیم، دیگه عملگر []delete نمی‌تونه حافظه رو آزاد بکنه و ما دچار Memory Leak می‌شیم. مشکل بزرگ‌تر: اگه این تیکه کد رو Compile بکنیم، هیچ خطایی نمی‌گیریم، چون کاملاً Valid هست، منتهیٰ از نظر منطقی مشکل داره. اگه کد رو با نهایت تنظیمات Warningها Compile‌ بکنیم می‌تونیم یه همچین Warningیی بگیریم:
warning: ‘void operator delete [](void*)’ called on pointer ‘<unknown>’ with nonzero offset 12 [-Wfree-nonheap-object]

C++
2 130
#tips #malloc #memory_allocation تفاوت عملگرهای new و delete با توابع malloc و free توابع new, delete و free, malloc جفت دسته، هدفشون گرفتن حافظه‌ست و در نهایت Allocation Function ها رو صدا می‌زنند، تنها تفاوت‌شون توی ++C این هست که وظیفهٔ هدایت RAII رو در دست می‌گیرند. مثلاً یه همچین چیزی غلط هست:
struct A{ A() {}; ~A() {} };
malloc(sizeof(A));
کاری کهCompiler برای new می‌کنه:
mov  edi, 1
call operator new(unsigned long)
mov  rdi, rax
call A::A() [complete object constructor]

و کاری که malloc می‌‌کنه:
mov edi, 1
call malloc

http://yosefk.com/c++fqa/heap.html#fqa-16.4

C++
2 130
photo content

C++
2 130
#کوئیز خروجی کد به چه صورت می باشد؟
Anonymous voting

C++
2 130
زبان های برنامه نویسی استفاده شده در بازی ها 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی
زبان های برنامه نویسی استفاده شده در بازی ها 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش سی پلاس پلاس ویژه مبتدیان-مقدماتی 🔘بخش هفت ➖قسمت ۶/۶ منبع:یودمی مدرس:Eduonix Learning Solutions #آموزش #یودمی 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش سی پلاس پلاس ویژه مبتدیان-مقدماتی 🔘بخش هفت ➖قسمت ۵/۶ منبع:یودمی مدرس:Eduonix Learning Solutions #آموزش #یودمی 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش سی پلاس پلاس ویژه مبتدیان-مقدماتی 🔘بخش هفت ➖قسمت ۴/۶ منبع:یودمی مدرس:Eduonix Learning Solutions #آموزش #یودمی 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش سی پلاس پلاس ویژه مبتدیان-مقدماتی 🔘بخش هفت ➖قسمت ۳/۶ منبع:یودمی مدرس:Eduonix Learning Solutions #آموزش #یودمی 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش سی پلاس پلاس ویژه مبتدیان-مقدماتی 🔘بخش هفت ➖قسمت ۲/۶ منبع:یودمی مدرس:Eduonix Learning Solutions #آموزش #یودمی 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش سی پلاس پلاس ویژه مبتدیان-مقدماتی 🔘بخش هفت ➖قسمت ۱/۶ منبع:یودمی مدرس:Eduonix Learning Solutions #آموزش #یودمی 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی

C++
2 130
👨‍🏫آموزش سی پلاس پلاس ویژه مبتدیان-مقدماتی 🔘بخش ششم ➖قسمت ۶/۶ منبع:یودمی مدرس:Eduonix Learning Solutions #آموزش #یودمی 〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️ 🔘گروه برنامه نویسی C/C++ 🔘سی پلاس پلاس فارسی