Я хочу создать if
, где переменная объявляется, назначается и проверяется. Если значение переменной приемлемо, я хочу использовать его внутри тела if
. Вот пример того, как я думал, что я мог бы сделать это:Почему следующий код является незаконным в C++
if ((int result = Foo()) != 0) {
// use result
}
Я предположил, что Foo()
возвращает некоторое значение, которое присваивается result
, и возвращает оператор присваивания =
, и, наконец, сверяется 0
в != 0
. К сожалению, это приводит к ошибке компиляции:
main.cpp:31:10: error: expected primary-expression before ‘int’
if ((int i = Foo()) != 0)
^
main.cpp:31:10: error: expected ‘)’ before ‘int’
Почему эта ошибка происходит? И какие могли бы исправить это?
объявлять 'Int result' за пределами, если, например, прежде чем пытаться его использовать. –
Если вы плохо злоупотребляете языком, вы можете сделать что-то вроде struct Foo {operator int() {return 42; }}; for (int i = Foo(); i! = 0;) {/ * do stuff */break; } –
Ну, ваша логика применима, если бы у вас действительно был «оператор присваивания» в вашем коде. Но вы этого не сделаете. '=' Не является оператором вообще, а 'int result = Foo()' не является выражением. Это декларация. Декларация не является выражением, которое требует особого отношения к этой ситуации и налагает ограничения на ее удобство использования. – AnT