Как присвоить константной переменной значение после условия
Мне нужно написать функцию которая принимает в качестве аргумента значение 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 шт):
Вообще, так делать нельзя. Но если задание звучит именно так, то можно (лучше так не делать) так:
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';
}
Для сложной инициализации констант можно использовать вот такой способ через лямбду, которая тут же вызывается - IIFE
void func(int value)
{
const int a = [value]() {
if(value == 1)
{
return 10;
}
if(value == 2)
{
return 20;
}
return 100;
}();
}
Такой синтаксис позволяет делать практически любые вычисления.
Еще два варианта(тернарная операция и определение по конкретной формуле):
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;
//...
}
Просто сначала вычисляете, а потом инициализируете:
void func(int value)
{
int b;
if(value == 1)
{
b = 10;
}
if(value == 2)
{
b = 20;
}
const int a = b;
}
Кстати, а что вы будете делать, если value равно, скажем, 0?