gpt4 book ai didi

c++ - 交换非常量引用参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:41:42 25 4
gpt4 key购买 nike

我从类型为“float”的右值中得到了类型为“float&”的非常量引用的[错误]无效初始化

#include <stdio.h>
void swap(float &a, float &b){
float temp=a;
a=b;
b=temp;
}
main()
{
int a=10, b=5;
swap((float)a, (float)b);
printf("%d%d",a,b);
}

最佳答案

Vlad 是正确的,为什么转换为 float?对所有值使用 int。但是,如果您出于某种原因这样做,则您的 castreferences 必须保持一致:

#include <stdio.h>

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

int main()
{
int a=10, b=5;
swap((float*)&a, (float*)&b);
printf("\n%d%d\n\n",a,b);
return 0;
}

输出:

$ ./bin/floatcast

510

当您将地址传递给函数时,它必须将指针 作为参数。因此 void swap(float *a,.. 当您需要对变量地址的引用(作为指针传递)时,您使用 address of 运算符 &。当您处理作为 pointer 传递的值时,为了对 values 进行操作code> 由 pointer 指向,您必须使用 * 运算符取消引用 指针。将所有这些放在一起,您将获得上面的代码。(使用 int 更容易... :)


C++ 引用

如果我理解你在评论中想要什么,你想要这样的东西:

#include <iostream>

// using namespace std;

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

int main()
{
int a=10, b=5;
swap ((float&)a, (float&)b);
std::cout << std::endl << a << b << std::endl << std::endl;
return 0;
}

输出:

$ ./bin/floatref

510

关于c++ - 交换非常量引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27328857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com