دوره‌ها / آموزش برنامه‌نویسی C++ / C++ Variables

C++ Variables

30 دقیقه Article

متغیرها در C++: ظروفِ هوشمندِ اطلاعات 🧱🧬

متغیرها بخشِ بنیادینِ هر زبانی هستند، اما در C++، آن‌ها قدرتِ بیشتری دارند. یک متغیر در واقع نامی برایِ یک قطعه از حافظه‌یِ رم (RAM) است که داده‌هایِ شما را نگه می‌دارد.

۱. اعلان و مقداردهی (Declaration & Initialization)

برای ساختنِ یک متغیر، باید نوعِ داده و نامِ آن را مشخص کنید:

{code_block('int score = 100;\ndouble price = 19.99;\nchar grade = "A";')}

۲. انواعِ مقداردهی در C++ مدرن:

  • Copy Initialization: int x = 5; (روش کلاسیک)
  • Direct Initialization: int x(5);
  • Uniform/Brace Initialization: int x{5}; (توصیه‌یِ C++ مدرن)
قوانینِ نام‌گذاری: نام‌ها نباید با عدد شروع شوند، نباید شاملِ فاصله باشند و نمی‌توانند از لغاتِ رزرو شده‌یِ C++ (مثل int یا return) استفاده کنند.

متغیرهایِ چندگانه:

می‌توانید چندین متغیر از یک نوع را در یک خط تعریف کنید:

{code_block('int x = 5, y = 10, z = 20;')}
ثابت‌ها (Constants): اگر می‌خواهید مقدارِ یک متغیر هرگز تغییر نکند، از کلمه‌یِ کلیدی const استفاده کنید. این کار به کامپایلر اجازه می‌دهد کدهایِ بهینه‌تری بسازد.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسیِ داده‌ها و مدیریت حافظه 🧱⚙️⚡

در C++، متغیرها فقط ظرفی برای داده نیستند؛ آن‌ها مدیریت‌کننده‌یِ منابع سیستم هستند. درکِ نحوه‌یِ ذخیره‌سازیِ این داده‌ها، تفاوتِ یک کدنویسِ عادی و یک معمارِ سیستم است.

۱. مقداردهیِ سراسری (Universal Initialization)

از استاندارد C++11 به بعد، روشِ جدیدی برای مقداردهی معرفی شد که از آکولاد {} استفاده می‌کند. این روش دو مزیت بزرگ دارد: اول اینکه از Narrowing Conversion جلوگیری می‌کند (مثلاً نمی‌گذارد یک double را در int بریزید و داده گم شود)؛ و دوم اینکه مشکلِ "Most Vexing Parse" را حل می‌کند که باعث می‌شد کامپایلر فکر کند شما در حالِ اعلانِ یک تابع هستید نه متغیر.

۲. معماریِ شئ String (SSO)

در C++، کلاسِ std::string بسیار هوشمند است. اکثرِ پیاده‌سازی‌هایِ مدرن از تکنیکی به نام Small String Optimization استفاده می‌کنند. اگر رشته‌یِ شما کوتاه باشد (مثلاً کمتر از ۱۵ یا ۲۳ کاراکتر)، آن را مستقیماً داخلِ خودِ شئ (روی Stack) ذخیره می‌کند تا از فراخوانیِ سنگینِ سیستم‌عامل برایِ دریافتِ حافظه از Heap جلوگیری شود. این یعنی سرعتِ فوق‌العاده در پردازشِ متن‌هایِ کوتاه.

۳. دقتِ محاسباتِ اعشاری (IEEE 754)

دنیایِ کامپیوتر باینری است و نمی‌تواند تمامِ اعدادِ اعشاریِ دهدهی را با دقتِ ۱۰۰٪ ذخیره کند. مثلاً عدد 0.1 در باینری یک عددِ متناوب است. به همین دلیل در سیستم‌های مالیِ حساس، هرگز نباید از float یا double برایِ مبالغِ دقیق استفاده کرد؛ مهندسان در این مواقع از متغیرهایِ صحیح (Integer) بر حسبِ "کوچکترین واحد" (مثل ریال یا سنت) استفاده می‌کنند.

نکته مهندسی: استفاده از کلمه‌یِ کلیدی auto به جایِ نوعِ داده، به کامپایلر اجازه می‌دهد خودش نوعِ متغیر را حدس بزند. این کار در کدهایِ پیچیده باعث می‌شود کدِ شما در برابرِ تغییراتِ آینده (Refactoring) مقاوم‌تر باشد.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تعریف و چاپ متغیر Easy
سوال تمرین

یک متغیر از نوعِ int به نام age با مقدارِ 20 تعریف کنید و آن را با استفاده از cout چاپ کنید.

پاسخ تمرین
CPP
#include <iostream>
using namespace std;

int main() {
  int age = 20;
  cout << age;
  return 0;
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.