Я играю с std::tuple
s в разных контекстах и наткнулся на некоторые вещи, которые работают, но я не уверен, есть ли у них снижение производительности.
В C ++ 17 оператор init имеетбыл введен для операторов if
и switch
.Чтобы определить несколько переменных разных типов, вы можете использовать временный кортеж и структурированные привязки.
if(const auto& [x, y] = std::tuple{some_expensive_int_calculation(), get_string_message()}; x != 0 && y != "") {
std::cout << "X is " << x << ", message equals " << y << std::endl;
}
Этот должен не иметь большого снижения производительности, если таковое имеется.Конечно, это создало бы кортеж, который сам по себе требует немного памяти больше, чем сами типы, но это распределяется в стеке, поэтому, опять же, это не должно повредить так сильно.Привязки x
и y
разрешаются во время компиляции, а не во время выполнения, так что это похоже на решение, которое не имеет больших потерь времени выполнения, не так ли?
EDIT : Обновлен пример, чтобы компилятор не мог тривиально оптимизировать кортеж и прояснить проблему.