gpt4 book ai didi

c++ - 在复合运算符上使用 static_cast

转载 作者:行者123 更新时间:2023-12-02 13:54:03 29 4
gpt4 key购买 nike

我是 C++ 编程的初学者...我正在练习,遇到了这个问题...这里我尝试在复合运算符上使用 static_cast...我实际上正在尝试除两个整数并得到双倍的答案...这是代码:

#include <iostream>
using namespace std;
int main() {
int g {0}, h {0};
cout << "Enter g and h: " << endl;
cin >> g >> h;
static_cast<double>(g) /= (h);
cout << "g: " << g << endl;
return 0;
}

现在我知道我可以将 int 更改为 double...或者执行如下操作:

i = g/h;
cout << static_cast<double>(i) << endl;

但是让我们来挑战一下......如果我们实际上需要输入整数(而不是 double )怎么办?

这是我得到的错误:

error: lvalue required as left operand of assignment

示例:通过转换更改数据类型

#include <iostream>
using namespace std;

int main()
{
int total {0};
int num1 {0}, num2 {0}, num3{0};
const int count {3};

cout << "Enter 3 integers: ";
cin >> num1 >> num2 >> num3;

total = num1 + num2 + num3;
double average {0.0};
//This is where it confuses almost everyone. Imagine total is equal to 50, so average is equal to 16.66.
//But the problem is that total is an integer so you will only get 16 as answer.
//The solution is to convert it by casting.
average = static_cast<double>(total) / count;
//average = (double)total/count; //Old-Style code

cout << "The 3 numbers are: " << num1 << ", " << num2 << ", " << num3 << endl;
cout << "The sum of the numbers are: " << total << endl;
cout << "The average of the numbers is: " << average << endl;

return 0;
}

最佳答案

我认为你误解了 static_cast 的功能.

static_cast将(如果可能)将值转换为另一种类型,并为您提供新类型的结果右值1。安rvalue不是您可以分配给2的东西(与左值不同,这是您在错误消息中看到的)。

在 C++ 中,变量的类型在声明期间仅给出一次。对于该变量的整个生命周期,它将是其声明的类型(请注意,这与 Python 或 JavaScript 等较弱类型的语言不同)。

<小时/>

在回复您的示例时,请注意没有变量正在更改其类型。

average = static_cast<double>(total) / count;

average被声明为double ,它仍然是 double 。这里的魔力在于你正在类型转换 totaldouble 。所以static_cast<double>(total)给你一个double与整数 total 等效的值(但这不再是 total !它现在是一个临时的未命名 double )。然后,您将未命名的double除以通过count ,并将结果赋给 average

<小时/>

1。除非要转换的类型是引用类型。 (谢谢布莱恩!)
2.对于原生类型。 “可以分配任何类类型右值,除非您明确禁止它。” (谢谢内森!)

关于c++ - 在复合运算符上使用 static_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184269/

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