Как присвоить константной переменной значение после условия

Мне нужно написать функцию которая принимает в качестве аргумента значение value. В начале в функции должно быть обьявление константной переменной const int далее исходя из значения value присвоить ей нужное значение

void func(int value)
{
    const int a;
    if(value == 1)
    {
        a = 10;
    }
    if(value == 2)
    {
        a = 20;
    }

}

int main()
{
    func(2);
}

При таком коде у меня ошибка которая заключаеться в необходимости инициализации. Можно ли как-то сделать присваивание константной переменной в условии


Ответы (4 шт):

Автор решения: n1tr0xs

Вообще, так делать нельзя. Но если задание звучит именно так, то можно (лучше так не делать) так:

void func(int value)
{
    const int volatile a = 0;
    int *p = const_cast<int*>(&a);
    if(value == 1)
    {
        *p = 10;
    }
    if(value == 2)
    {
        *p = 20;
    }
    cout << "New a: " << a << '\n';
}

Или можно использовать тернарный оператор:

void func(int value)
{
    const int a = (value == 1) ? 10 : ((value == 2) ? 20 : -1);
    cout << "A: " << a << '\n';
}
→ Ссылка
Автор решения: KoVadim

Для сложной инициализации констант можно использовать вот такой способ через лямбду, которая тут же вызывается - IIFE

void func(int value)
{
    const int a = [value]() {
        if(value == 1)
        {
            return 10;
        }
        if(value == 2)
        {
            return 20;
        }
        return 100;
    }();
}

Такой синтаксис позволяет делать практически любые вычисления.

→ Ссылка
Автор решения: AR Hovsepyan

Еще два варианта(тернарная операция и определение по конкретной формуле):

void func(int value)
{
    const int a = (value == 1) ? 10 : (value == 2) ? 20 : (value == 3) ? 60 : 100;
    //...
}

или

void func(int value)
{
    const int a = value * 10;
    //...
}
→ Ссылка
Автор решения: Mikhailo

Просто сначала вычисляете, а потом инициализируете:

void func(int value)
{
    int b;
    if(value == 1)
    {
        b = 10;
    }
    if(value == 2)
    {
        b = 20;
    }

    const int a = b;

}

Кстати, а что вы будете делать, если value равно, скажем, 0?

→ Ссылка