اگر به صورت زیر تغییرش بدید کار می کنه در چنین مواردی باید از constexper استفاده کنید .البته برای هر تابعی نمیشه از constexper استفاده کرد شرایط استفاده از constexper توی توابع را در ادامه ذکر می کنم.
constexper int getArraySize() { return ۳۲; }
int main()
{
int myArray[getArraySize()];
return ۰;
}
-
بدنه تابع نباید حاوی موارد زیر باشد :
-
هیچ گونه goto
-
بلوک های try/catch
-
متغیرهای بدون مقدار اولیه
-
متغیرهای غیر Literal
-
هیچ استثنایی را نباید throw کنید .
-
نوع بازگشتی تابع باید یک نوع دقیق باشد.
-
اگر تابع constexpr عضوی از یک کلاس باشد، تابع نمیتواند مجازی باشد.
-
تمام پارامترهای تابع باید انواع دقیق باشند.
-
یک تابع constexpr را نمیتوان فراخوانی کرد تا زمانی که در واحد ترجمه تعریف شود چرا که کامپایلر نیاز به دانستن تعریف کامل سورس دارد به طور خلاصه از template استفاده نکنید.
-
dynamic_cast()و cast reinterpret () مجاز نیستند.
-
new و delete هم مجاز به استفاده نیستند