编写一个功能,该函数将使用框架交换两个整数

Write a function that will swap two integers using refrences

本文关键字:框架 交换 整数 两个 一个 功能 函数      更新时间:2023-10-16

这是一个特别奇怪的问题,但是我试图编写一个函数,可以交换两个整数的值而无需使用引用或'&''。我看不出这是怎么可能的。这是我到目前为止所拥有的。

    void swap (int a, int b)
    {
    int temp;
    temp = a;
    a = b;
    b = temp;
    }

这通常是我这样做的方式,但是由于整数没有永久改变,所以我不知道我在不参考的情况下会这样做。有什么建议吗?

谢谢!

您应该更正问题标题。它说"使用参考"。这显然与您的意思相反。

假设:

  • 确实不允许参考和指针,夸大任何包装的技巧
  • 您想要的运行时交换是您想要的 - 而不是编译时间模板骗局
  • 没有类,因为那会很琐碎

我能想到一个完全可怕的解决方案。使您的INT全球群体。

荒谬的_swap.hpp

#ifndef RIDICULOUS_SWAP_HPP
#define RIDICULOUS_SWAP_HPP
extern int first;
extern int second;
void swap_ints();
#endif // RIDICULOUS_SWAP_HPP

荒谬的_swap.cpp

int first = 0;
int second = 0;
void swap_ints()
{
    auto tmp = first;
    first = second;
    second = tmp;
}

main.cpp

#include "ridiculous_swap.hpp"
#include <iostream>
int main()
{
    first = 23;
    second = 42;
    std::cout << "first " << first << " second " << second << "n";
    // prints: first 23 second 42
    swap_ints();
    std::cout << "first " << first << " second " << second << "n";
    // prints: first 42 second 23
}

这对任何事情都没有用,但是它可以在不使用参考或指针的情况下交换两个整数。

有一个旧技巧可以交换两个类似整数的变量而不使用临时变量:

void swap(int& a, int& b)
{
    a ^= b; 
    b ^= a; // b ^ (a ^b)  = a
    a ^= b; // (a ^ b) ^ a = b
}