تو دو تا پست قبل در باره سازندهها در c++11 نوشتم (اینجا و اینجا). این پست آخر از این سریه و به مقداردهی جدید اختصاص داره.
استاندارد جدید برای مقدار دهی اولیه به انواع مختلف، راه حل یکسانی پیشنهاد میده. در واقع مقداردهی اولیه شبیه به حالتی میشه که قبلا برای آرایههای با اندازه ثابت استفاده میشد:
[cpp light=”true”]
int arr[4]={0,1,2,3};
[/cpp]
اما مقداردهی با این سبک تو استاندارد جدید:
- آرایههای پویا:
[cpp light=”true”]
int* a = new int[3] { 1, 2, 0 };
[/cpp] - سازندههای کلاسها:
[cpp light=”true”]
class C
{
int a;
int b;
public:
C(int i, int j);
};C c {0,0}; //Equivalent to: C c(0,0);
[/cpp] - مقداردهی اولیه به اعضای آرایهای در سازنده:
[cpp light=”true”]
class X {
int a[4];
public:
X() : a{1,2,3,4} {} //C++11, member array initializer
};
[/cpp] - استفاده از std::initializer_list: اگر پارامتر سازنده از نوع std::initializer_list باشه، سازنده میتونه هر چند تا پارامتر بگیره. به طور خاص این حالت برای کلاسهایی که به شکل ذخیر کننده عمل میکنند مفیده. مثلا containerهای stl:
[cpp light=”true”]
vectorvs={ “first”, “second”, “third”};
map singers =
{ {“Lady Gaga”, “+1 (212) 555-7890”},
{“Beyonce Knowles”, “+1 (212) 555-0987”}};
[/cpp]