Как в данном случае прям из функции присвоить значения переменным?

Рейтинг: -1Ответов: 1Опубликовано: 01.03.2023
#include <iostream>

template<typename T>
T swap(T& a, T& b) {
    T* t = new T;
    *t = a;
    a = b;
    b = *t;
    delete t;
    return a, b;
}

int main() {
    int q = 1;
    int w = 3;
    double e = 2.3; 
    double t = 4.3;

    swap<int>(q, w);
    swap<double>(e, t);

    std::cout << q << " " << w << std::endl;
    std::cout << e << " " << t << std::endl;

}

Ответы

▲ 1

Все работает (проверено именно в VC++), но не проще было бы просто написать

void swap(auto& a, auto& b) {
    auto t = a;
    a = b;
    b = t;
}

заодно не выделяя память динамически?

И - зачем вам это return a, b;? Кстати, надеюсь, вы в курсе, что при этом возвращается одно значение - b?

P.S. По обсуждении с HolyBlackCat родился более строгий вариант, не допускающий переменные разных типов:

void swap(auto& a, auto& b)
{
    static_assert(is_same_v<remove_cvref_t<decltype(a)>,
                            remove_cvref_t<decltype(b)>>,
                  "Different types");
    auto t = a;
    a = b;
    b = t;
}