why i cant use args as a constant expression in c++
I have this simple code, I want to send a two args to this function, one is "i" and the other is "n", when try to switch "i" in case of equal to 'n' I failed, because he say 'n' is not a constant expression, I read about this problem, I want to find a method to make 'n' is a constant expression. this is the function:
float east_coefficient(int i, int n){
switch(i){
case 1:
return 0;
break;
case n:
return 0;
break;
default:
return 1;
}
}
and this is the main function:
int main(){
int i, x;
const int n = 5;
x = east_coefficient(i, n);
cout << x;
}
Solution 1:
Function arguments aren't constant expressions. n
and i
are not initialized in your code. You can make n
a template argument:
#include <iostream>
template <int n>
float east_coefficient(int i){
switch(i){
case 1:
return 0;
break;
case n:
return 0;
break;
default:
return 1;
}
}
int main(){
constexpr int n = 2;
auto x = east_coefficient<n>(42);
std::cout << x;
}