برنامه نویسی

تفاوت بین تعریف متغیر ، اولیه سازی و انتساب در C ++ چیست؟

هنگام خواندن بحث در مورد تعاریف متغیر C ++ و قوانین مرتبط با آنها ، درک تمایز بین تعریف متغیر ، اولیه سازی و واگذاری ضروری است. هر مفهوم نقش مهمی در نحوه رفتار متغیرها در کد C ++ دارد و دانستن این اختلافات می تواند به طور قابل توجهی راندمان برنامه نویسی شما را افزایش دهد. بیایید عمیق تر به متغیرهای C ++ و این شرایط را با مثال روشن کنید.

درک تعریف متغیر

در C ++ ، تعریف متغیر فرآیند اعلام متغیر برای اطلاع کامپایلر از نوع متغیر و نام آن است. به عنوان مثال:

int x; // Variable definition

در اینجا int x; به کامپایلر می گوید که برای یک متغیر عدد صحیح به نام ، فضای حافظه را رزرو کند xبشر با این حال ، در این مرحله ، x هیچ ارزشی ندارد ؛ این به سادگی تعریف شده است.

اولیه سازی متغیر چیست؟

شروع در زمان تعریف آن به فرایند اختصاص یک مقدار به یک متغیر اشاره دارد. این امر بسیار مهم است زیرا یک متغیر غیرقانونی ممکن است حاوی مقادیر زباله باشد اگر قبل از انتساب استفاده شود. در اینجا مثالی از اولیه سازی متغیر آورده شده است:

int y = 10; // Variable initialization
int z{20}; // Using uniform initialization

هر دو y وت z تعریف و اولیه شده اند ، به این معنی که اکنون آنها حاوی مقادیر درست پس از اعلامیه های خود هستند. روش اولیه با استفاده از بریس های فرفری ({}) به عنوان شناخته شده است اولیه سازی یکنواخت، معرفی شده در C ++ 11 ، و به جلوگیری از برخی موارد با تبدیل های باریک یا کسر نوع غیر عمدی کمک می کند.

درک تکلیف

تخصیص از تعریف و اولیه سازی متمایز است. این فرآیند تنظیم یک مقدار در یک متغیر از قبل تعریف شده است. به عنوان مثال:

int foo; // Definition
foo = 10; // Assignment

این قطعه تعریف می کند foo ابتدا بدون اختصاص دادن به آن مقدار و بعداً مقدار را اختصاص می دهد 10 به fooبشر درک این نکته ضروری است که تکالیف فقط پس از تعریف یک متغیر می تواند رخ دهد.

قوانین دامنه C ++ و مورد سوئیچ

سردرگمی پیرامون اعلامیه متغیر و اولیه سازی اغلب در ساختارهای پیچیده مانند ایجاد می شود اظهارات سوئیچیبشر کد ارائه شده را در نظر بگیرید:

switch (1) {
    int a; // okay: definition is allowed before case labels
    int b{ 5 }; // illegal: initialization is not allowed before case labels

    case 1:
        int y; // okay but bad practice: definition allowed within a case
        y = 4; // okay: assignment is allowed
        break;

    case 2:
        int z{ 4 }; // illegal: initialization is not allowed if subsequent cases exist
        y = 5; // okay: y was declared above, so we can use it here too
        break;

    case 3:
        break;
}

در این ساختار می توانید متغیر را قبل از case برچسب ها (int a;) ، اما شروع (مثل int b{5};) مجاز نیست زیرا به دلیل قوانین دامنه می تواند باعث سردرگمی شود. این مشخصات با هدف جلوگیری از سوء تفاهم های احتمالی در جایی که ممکن است اولیه سازی به دلیل سقوط موردی از بین برود ، جلوگیری می شود.

چرا محدودیت ها؟

قاعده در مورد اولیه سازی متغیرها قبل از برچسب های پرونده در درجه اول برای حفظ و وضوح است. اگر اولیه سازی مجاز باشد ، می تواند به سناریوهایی منجر شود که برنامه نویس به اشتباه معتقد باشد که متغیر آنها در همه موارد تعیین شده است ، در حالی که در واقع ، ممکن است فقط در یک مورد خاص به دلیل نحوه برخورد C ++ از Scopes متغیر استفاده شود.

خلاصه تعاریف ، اولیه و تکالیف

برای یادآوری ، در اینجا تفاوت های اصلی وجود دارد:

  • تعریف: گفتن کامپایلر در مورد نوع متغیر و حافظه رزرو برای آن.
  • شروع: اختصاص یک مقدار به یک متغیر در زمان ایجاد – این می تواند در صورت سوء استفاده از دامنه مشکل ایجاد کند.
  • تخصیص: پس از اعلامیه ، مقداری به یک متغیر از قبل تعریف شده داده شده است.

سوالات متداول

آیا می توانم متغیر را در همان عبارت تعریف و اولیه کنم؟

بله ، می توانید با استفاده از هر یک از متغیرها را در یک خط تعریف و اولیه کنید = یا {} برای لیست های اولیه ساز.

چرا اولیه سازی یکنواخت ترجیح داده می شود؟

اولیه سازی یکنواخت با استفاده از بریس های فرفری مانع از مشکلات رایج در ارتباط با باریک شدن نوع و مشکلات اولیه اولیه می شود.

چه اتفاقی می افتد اگر از یک متغیر غیرقانونی استفاده کنم؟

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

پایان

درک تفاوت بین تعریف متغیر ، اولیه سازی و انتساب برای نوشتن برنامه های C ++ روشن و مؤثر است. همانطور که تمرین می کنید ، خواهید فهمید که این مفاهیم به ماهیت دوم تبدیل می شوند و به شما امکان می دهند کد بهتر و قابل حفظ تری بنویسید. همیشه قوانین دامنه ، به ویژه هنگام برخورد با ساختارهای کنترل پیچیده مانند اظهارات سوئیچ را به خاطر بسپارید تا از رفتارهای غیر منتظره در برنامه های خود جلوگیری کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا