constexpr int hello(int j) {
return j * 12;
}
constexpr int bye(int j = 6) {
return j * 12;
}
int main() {
int i = 6;
constexpr int a1 = hello(i); //error
constexpr int a2 = hello(6); //ok
constexpr int a3 = hello(int(6)); //ok
constexpr int a4 = bye(); //ok
constexpr int a5 = bye(i); //error
constexpr int a6 = bye(6); //ok
return 0;
}
Какая разница между hellow(i)
и hello(6)
? Я думаю, один - int j = i;
, а j - не constexpr, а другой - int j = 6
, а j - еще не constexpr, оба типа j int
.
int * literal! = Constexpr , поэтому тип возвращаемого значения не является constexpr.
Я получил вышеуказанный вывод из примера в книге:
int staff_size = 27; //staff_size is not a const expression
Хотя staff_size инициализируется из литерала, он не является постоянным выражением
потому что это обычный int, а не const int.
Более того, я замечаю, что hello(int(6))
тоже отлично работает, что здесь за «вещь»?
Кроме того, bye()
работает, а hello(i)
- нет, оба параметра инициализируются внутри функции, только один со значением по умолчанию, какой здесь смысл?
Очень растерялся, надеюсь, кто-нибудь сможет объяснить: D
PS: понятия не имею, чтобы придумать лучший заголовок, извините за это