Инициализация внутри if

127
24 августа 2021, 16:30

В 17 стандарте появилась возможность инициализировать переменную внутри условия if (init; condition) Значит я могу сделать так if(int i =12; d < i){} или так if(int i,b = 10; i == b) {} Но как проинициализировать некоторое количество переменных разных типов?

Answer 1

Ответ тот же самый, что и для множественных объявлений в for: C++, более одного объявления в выражении инициализации цикла for

Элегантного способа нет, но кому-то может понравиться вариант со structured binding

if (auto [a, b] = std::make_tuple(4, 3.14); a == b)
  std::cout << "Yay! Pi is " << a << "!" << std::endl;
else
  std::cout << "Nay... Pi is not " << a << "..." << std::endl;
Answer 2

Ну как мед, так ложкой...
Или "дайте воды попить, а то так есть хочется - даже переночевать негде!"...

Воспользуйтесь структурой, например:

if (struct { int i; double d; } x = {5, 4.5}; x.i > 5 && x.d < 4)
{
}

Update
Почему я не сторонник применения сруктурного связывания... Потому что по размеру имеем примерно то же, а вот по типам...

Сравните, например:

if (auto[a,b] = make_tuple(1,"ddd"); a > 0)
{
    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
}
if (struct { double a; string b; } x = {1,"ddd"}; x.a > 0)
{
    cout << typeid(x.a).name() << endl;
    cout << typeid(x.b).name() << endl;
}

Здесь нужно предельно точно представлять себе, что именно и как именно инициализируется - скажем, не забыть дописать к 1 точку, или s к "ddd"...

Answer 3

Чем бы дитя не тешилось... Такое было давно в 199...

// g++ -Wall -std=c++98 if_pr.cpp
# include <iostream>
# define If(A,B,C,D) {A {if(B){C} else{ D}}}
int f(void){
  If(int x=0;int y=1;int z=2;int v=x+y+z;,v>0,
    return v;,
    return 0;)}
int main(){
  std::cout<<"f="<<f()<<"\n";
}  

Это просто шутка...

READ ALSO
each + setinterval +addClass [дубликат]

each + setinterval +addClass [дубликат]

Подскажите, как запустить бесконечный цикл добавления у убирания класса?

345
как передать переменной значение span class

как передать переменной значение span class

Пишу скрипт, вот кусок кода страницы

179
JSON Сериализация Dictionary

JSON Сериализация Dictionary

Помогите плиз, как можно такое заджейсонитьИспользую юнити

204
Как собрать выражение для конкатенации свойств произвольного класса?

Как собрать выражение для конкатенации свойств произвольного класса?

Хочу с помощью деревьев выражений LINQ сгенерировать делегат, который будет делать конкатенацию всех строковых свойств произвольного типа:

149