c ++ Назначение ссылочной переменной в операторе if - PullRequest
0 голосов
/ 03 февраля 2019

Как я могу назначить ссылочную переменную на основе оператора if?

Например, следующий пример не работает, потому что «поменьше» не имеет области действия вне оператора if.

int x = 1;
int y = 2;
if(x < y)
{
    int & smaller = x;
}
else if (x > y)
{
    int & smaller = y;
}
/* error: smaller undefined */

Однако следующий пример также не работает, потому что ссылки должны быть немедленно назначены объектам.

int x = 1;
int y = 2;
int & smaller; /* error: requires an initializer */
if(x < y)
{
    smaller = x;
}
else if (x > y)
{
    smaller = y;
}

Я мог бы добиться назначения ссылки с помощью оператора ternary-if, но чтоесли я не смогу это использовать?

1 Ответ

0 голосов
/ 03 февраля 2019

используйте функцию:

int &foo(int &x, int &y) {
  if(x < y)
  {
    return x;
  }
  else if (x > y)
  {
    return y;
  } else {
    // what do you expect to happen here?
    return x;
  }
}

int main() {
  int x = 1;
  int y = 2;
  int & smaller = foo(x, y); /* should work now */
}

Обратите внимание, в вашем случае я бы даже ожидал, что foo вернет const int&, так как было бы странно изменять значение, обозначенное как меньшее, но, как вы это и сделалине используйте это const в вашем вопросе, я держу это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...