نقش کلمه mutable در ++C - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

نقش کلمه mutable در ++C

+3 امتیاز

سلا م کدی که توی این لینک هست چطوری کار می کنه ؟

#include <iostream>
 
using namespace std;
 
 
class AA{
public :
    AA(int b):b_(b){}
    int b_;
};
 
class A{
public:
    A(float value):value_(value){}
    void scale(const float &scale){
        value_ *= scale;
    }
    float value_;
};
  
void test2(A a){
}
 
int main()
{
    test2( [] (void) mutable -> A { A a(20);A b = a;b.scale(1.5);return b;} () );
}

کار این  <-- mutable [] چیه ؟

سوال شده فروردین 12, 1393  بوسیله ی York (امتیاز 53)   4 7 11

1 پاسخ

+4 امتیاز
 
بهترین پاسخ
سلام .

داخل کلاس ها متدهایی که به صورت const تعریف شدند نمیتونند هیچ یک از اعضای کلاس رو تغییر بدند .

حالا اگر بخواهید در داخل این متد ها متغییر یا عضوی رو تغییر بدید باید اون رو mutable تعریف کنید تا موقع تغییر دادن اون عضو با خطا مواجه نشید .

ولی تو کد بالا mutable فرق میکنه .

توی کد بالا mutable در عبارت Lambda استفاده شده . به خاطر اینکه اگر عبارت Lambda بخواد متغییری رو که Capture کرده رو تغییر بده یا بخواد متد عضو شی هایی رو که Capture کرده رو صدا بزنه که const نیستند باید mutable تعریف بشه .

باید به این توجه کنید که این قانون برای چیزهایی که Capture شده هست . نه جیزهایی که داخل خود Lambda تعریف شدند .
پاسخ داده شده فروردین 12, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد فروردین 12, 1393 بوسیله ی York
...