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

C++ Data Types

30 دقیقه Article

انواعِ داده (Data Types): دسته‌بندیِ اطلاعات 💎🔢

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

۱. انواعِ پایه (Primitives)

  • int: اعدادِ صحیح (معمولاً ۴ بایت).
  • float: اعدادِ اعشاریِ ساده.
  • double: اعدادِ اعشاری با دقتِ دوبرابر (۸ بایت - استانداردِ محاسباتِ مدرن).
  • char: تک کاراکتر (۱ بایت).
  • bool: مقادیرِ منطقی (true یا false).

۲. اصلاح‌گرها (Modifiers):

می‌توانید با استفاده از کلماتی مثل long، short، signed و unsigned ظرفیت و رفتارِ انواعِ عددی را تغییر دهید.

اندازه متغیرها: اندازه دقیقِ انواعِ داده به سیستم‌عامل و پردازنده‌یِ شما بستگی دارد. برایِ دانستنِ اندازه‌یِ دقیق در سیستمِ خود، از اپراتورِ sizeof() استفاده کنید.

اعدادِ صحیحِ بدونِ علامت:

{code_block('unsigned int positiveOnly = 500;')}

این متغیر نمی‌تواند عددِ منفی بگیرد، اما در عوض می‌تواند اعدادِ مثبتِ بسیار بزرگتری را نسبت به int معمولی نگه دارد.

استانداردهای مدرن: در پروژه‌هایِ صنعتیِ بسیار حساس، از هدرِ <cstdint> و انواعی مثل int32_t استفاده می‌شود تا مطمئن شویم متغیر در تمامِ کامپیوترها دقیقاً ۳۲ بیت است.
<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
سوال تمرین

یک متغیر double به نام pi با مقدارِ 3.14159 بسازید و آن را چاپ کنید.

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

int main() {
  double pi = 3.14159;
  cout << pi;
  return 0;
}

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

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