А можно в if объявить переменную и сразу её проверить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.08.22 16:28
Оценка:
Здравствуйте!

Хочу типа такого:

if (( size_t idx = findIdx())!=-1)
{
    // Делаем что-то с найденым idx
}


Если так написать — не компилится, а если убрать скобки, то idx будет не результатом функции, а результатом сравнения результата функции и -1.

Не подскажете?
Маньяк Робокряк колесит по городу
Re: А можно в if объявить переменную и сразу её проверить?
От: reversecode google
Дата: 31.08.22 16:30
Оценка: +1 -2
можно в с++20
открой уже учебник и прочитай
Re[2]: А можно в if объявить переменную и сразу её проверить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.08.22 16:40
Оценка: +9 -2
Здравствуйте, reversecode, Вы писали:

R>можно в с++20

R>открой уже учебник и прочитай

А можно не писать такие ответы?
Маньяк Робокряк колесит по городу
Re: А можно в if объявить переменную и сразу её проверить?
От: DiPaolo Россия  
Дата: 31.08.22 16:43
Оценка: 23 (5) +2
Начиная с C++17 можно так:

if (size_t idx = findIdx(); idx != -1)
{
    // Делаем что-то с найденым idx
}
Патриот здравого смысла
Re: А можно в if объявить переменную и сразу её проверить?
От: kov_serg Россия  
Дата: 31.08.22 18:59
Оценка:
Здравствуйте, Marty, Вы писали:

M>Хочу типа такого:

Зачем?

M>
if (( size_t idx = findIdx())!=-1)
M>{
M>    // Делаем что-то с найденым idx
M>}
M>


Чем это лучше чем это?
{ 
  ptrdiff_t idx=findIdx();
  if (idx!=-1) {
  } else {
  }
}

M>Не подскажете?
Re: А можно в if объявить переменную и сразу её проверить?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 31.08.22 20:30
Оценка: +1 -5
Здравствуйте, Marty, Вы писали:

M>Не подскажете?

Открыть учебник по 17 плюсам или посмотреть на cppref про if.
Sic luceat lux!
Re[2]: А можно в if объявить переменную и сразу её проверить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.08.22 21:07
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Чем это лучше чем это?

_>
_>{ 
_>  ptrdiff_t idx=findIdx();
_>  if (idx!=-1) {
_>  } else {
_>  }
_>}
_>

M>>Не подскажете?


Хотелось что-то типа:
if (auto c1=get1(); c1!=-1)
{
}
else if (auto c2=get2(); c2!=-1)
{
}
//...
Маньяк Робокряк колесит по городу
Re[2]: А можно в if объявить переменную и сразу её проверить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.08.22 21:09
Оценка:
Здравствуйте, Kernan, Вы писали:

M>>Не подскажете?

K>Открыть учебник по 17 плюсам или посмотреть на cppref про if.

Спасибо (на самом деле нет)
Маньяк Робокряк колесит по городу
Re[2]: А можно в if объявить переменную и сразу её проверить?
От: DiPaolo Россия  
Дата: 01.09.22 01:12
Оценка: +4
M>>
if (( size_t idx = findIdx())!=-1)
M>>{
M>>    // Делаем что-то с найденым idx
M>>}
M>>


_>Чем это лучше чем это?

_>
_>{ 
_>  ptrdiff_t idx=findIdx();
_>  if (idx!=-1) {
_>  } else {
_>  }
_>}
_>

M>>Не подскажете?

Не вводится дополнительная переменная в область видимости внешней функции. Всегда имеет смысл сокращать область видимости переменных, чтобы не вносить дополнительную сложность.
Патриот здравого смысла
Re[3]: А можно в if объявить переменную и сразу её проверить?
От: kov_serg Россия  
Дата: 01.09.22 06:12
Оценка: -2 :)
Здравствуйте, Marty, Вы писали:

M>Хотелось что-то типа:

M>
M>if (auto c1=get1(); c1!=-1)
M>{
M>}
M>else if (auto c2=get2(); c2!=-1)
M>{
M>}
M>//...
M>


Чем так плохо?
{ auto c1=get1(); if (c1!=1) {
  }
  else { auto c2=get2(); if (c2!=1) {
  }}
}
Re[4]: А можно в if объявить переменную и сразу её проверить?
От: Doom100500 Израиль  
Дата: 01.09.22 06:59
Оценка: +1
Здравствуйте, kov_serg, Вы писали:

_>Чем так плохо?

_>
_>{ auto c1=get1(); if (c1!=1) {
_>  }
_>  else { auto c2=get2(); if (c2!=1) {
_>  }}
_>}
_>


Ужасный костыль, который получит много WTF на code review.
Спасибо за внимание
Re[5]: А можно в if объявить переменную и сразу её проверить?
От: mike_rs Россия  
Дата: 01.09.22 09:14
Оценка: 1 (1) -2
Здравствуйте, Doom100500, Вы писали:

D>Ужасный костыль, который получит много WTF на code review.


Ага, а за конструкцию "if (size_t idx = findIdx(); idx != -1)" на ревью получишь аплодисменты стоя?
Re[4]: А можно в if объявить переменную и сразу её проверить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.09.22 09:56
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Чем так плохо?

_>
_>{ auto c1=get1(); if (c1!=1) {
_>  }
_>  else { auto c2=get2(); if (c2!=1) {
_>  }}
_>}
_>



А еще else if как добавить? Я просто не написал его, думал идея будет понятна
Маньяк Робокряк колесит по городу
Re[6]: А можно в if объявить переменную и сразу её проверить
От: Doom100500 Израиль  
Дата: 01.09.22 10:16
Оценка: +3
Здравствуйте, mike_rs, Вы писали:

_>Здравствуйте, Doom100500, Вы писали:


D>>Ужасный костыль, который получит много WTF на code review.


_>Ага, а за конструкцию "if (size_t idx = findIdx(); idx != -1)" на ревью получишь аплодисменты стоя?


Понятная и лаконичная конструкция без подсчёта фигурных скогок и осмысливания их. Используется, в том числе, и в других языках:

if err := someOperation; err != nil {
   return nil, err
}
Спасибо за внимание
Отредактировано 01.09.2022 10:17 Doom100500 . Предыдущая версия .
Re[5]: А можно в if объявить переменную и сразу её проверить?
От: kov_serg Россия  
Дата: 01.09.22 11:32
Оценка:
Здравствуйте, Marty, Вы писали:

M>А еще else if как добавить? Я просто не написал его, думал идея будет понятна

Так:
{ 
  auto c1=get1();
  if (c1) {
    auto c2=get2();
    if (c2) {

    } else {

    }
  } else {
    auto c3=get3();
    if (c3) {

    } else {

    }
  }
}
Re[2]: А можно в if объявить переменную и сразу её проверить?
От: denis.st Россия  
Дата: 01.09.22 11:40
Оценка:
_>Чем это лучше чем это?
лаконичностью и читаемостью
Re[6]: А можно в if объявить переменную и сразу её проверить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.09.22 11:45
Оценка:
Здравствуйте, kov_serg, Вы писали:

M>>А еще else if как добавить? Я просто не написал его, думал идея будет понятна

_>Так:

Ну, чем больше else, тем больше пипецома из скобочек. В общем, я обошел это тем, что все переменные заранее объявил, а присваиваю в if'е. Несколько не то — все переменные видны во всех ветках, но это не большая проблема. Впрочем, можно было и и 17ому способу сделать, было бы именно так, как хочется. Просто я не знал (вернее, знал, но забыл), как в новых плюсах это делается, и 17ые не всегда доступны, хотелось разобраться, можно ли в рамках старых плюсов это как-то сделать
Маньяк Робокряк колесит по городу
Re[3]: А можно в if объявить переменную и сразу её проверить?
От: kov_serg Россия  
Дата: 01.09.22 13:28
Оценка: -5 :))
Здравствуйте, denis.st, Вы писали:

_>>Чем это лучше чем это?

DS>лаконичностью и читаемостью

С++ это не про лаконичность и тем более не про читаемость.
Re[6]: А можно в if объявить переменную и сразу её проверить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.09.22 17:42
Оценка:
Здравствуйте, mike_rs, Вы писали:

D>>Ужасный костыль, который получит много WTF на code review.


_>Ага, а за конструкцию "if (size_t idx = findIdx(); idx != -1)" на ревью получишь аплодисменты стоя?


Нормальная конструкция. Даже если и не знал, что такое есть, аналогия с for сразу очевидна
Маньяк Робокряк колесит по городу
Re[2]: А можно в if объявить переменную и сразу её проверить?
От: Ip Man Китай  
Дата: 02.09.22 03:27
Оценка: 1 (1)
Здравствуйте, reversecode, Вы писали:

R>можно в с++20

R>открой уже учебник и прочитай

а что ты так разговариваешь? Человек нормально вопрос задал.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.