رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

سوال

2 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0
در 5 ساعت قبل، Mohammad Rahbari Doust گفته است :

سلام، در مورد اینکه cv-qualification چی هست سوال داشتم ممنون می‌شم توضیح بدید.

در استاندارد سی‌پلاس‌پلاس وقتی نیاز است تا نوعی را برای متغیر خود انتخاب و توصیف کنید به طور معمول آن را به صورت‌های نوعِ اساسی و پایه مانند عدد صحیح، رشته، آرایه و غیره و یا یک نوع ویژهٔ واجد شرایط جهتِ استثناء شدن توصیف می‌کنیم. این انواع به دو صورت no cv-qualifier و cv-qualifier از هم متفاوت توصیف می‌شوند.

کلمات CV خلاصه‌ شدهٔ const و volatile است، زمانی که شما نوعی از متغیر را تحت کلمات کلیدی const و volatile توصیف می‌کنید در واقع نوع آن را تحت عنوان const-qualified و volatile-qualified توصیف کرده‌اید که از تعریف عادی متمایز می‌شوند و با این کار متغیر را واجد شرایط خاصی قرار می‌دهید.

برای مثال، نوع زیر در قالب استاندارد cv-qualifier تعریف شده است که به صورت ضروری مقدار اولیهٔ آن نیز مشخص شده است:

const int ci = 3; 

در صورتی که کدی همانند نمونهٔ زیر داشته باشیم:

const int ci = 3;
ci = 4;

از طرف کامپایلر با خطایی مشابه خطای زیر مواجه خواهیم شد:

error: cannot assign to variable 'ci' with const-qualified type 'const int'

منظور از این خطا این است که، مقدار جدیدی را شما نمی‌توانید به متغیری از نوع const که تحتِ شرایطِ const-qualified می‌باشد بدهید.

از طرفی اگر نوع متغیر خود را با volatile توصیف کنید، مقدار متغیر در هر نَخ (Thread) دیگر احتمال تغییر یافتن را خواهد داشت.

volatile int ci = 3;
ci = 4;

در واقع شما آن متغیر را واجد شرایط ویژه‌ای قرار داده‌اید که بتواند در هرجا که نیاز بود تغییر پیدا کند. (در این حالت بر خلاف نوع const کامپایلر خطایی را از خود ساطع نمی‌کند و علاوه بر آن در زمان بهینه‌سازی از آن مورد صرف نظر خواهد کرد).

استفاده از کلمهٔ کلیدی volatile  بهینه‌سازی کامپایلر را از بهینه‌سازی آن دور می‌کند.توجه داشته باشید که یک کلمهٔ کلیدی ویژه نیز وجود دارد به نام mutable که از آن زمانی استفاده می‌شود که اعضای کلاس و نوع توابع شما به صورت const یعنی از نوع const-qualified توصیف شده باشد که تغییر آن امکان‌پذیر نیست. در صورتی که لازم باشد استثناء یا واجد شرایط قرار بگیرد نوع آن توسط mutable می‌تواند توصیف شود که اجازهٔ تغییر فقط به آن مورد داده خواهد شد.

mutable int i;

در نهایت متغیر‌ زیر به صورت no cv-qualitifier تعریف شده است که در حالت معمول بر اساس قوانین و شرایطی که کامپایلر در نظر می‌گیرد با آن برخورد و در صورت نیاز بهینه‌سازی خواهد شد.

int i = 2;

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...