类型转换困境

Type casting/ conversion dilemma

本文关键字:困境 类型转换      更新时间:2023-10-16

我还只是刚开始学习c++,还没有处理过太多的类型转换。我的印象是语法是(type) (variables),然而,在这种情况下,这似乎不起作用。

float calcSphere (int radius)
{
    float sphereSA;
    sphereSA =  (4 * PI *  (radius*radius));
    return sphereSA;
}

PI是在代码顶部使用#define PI 3.14声明的符号常数,我试图通过使用(float) (4 * PI * (radius*radius))来解决这个问题,但这并没有解决任何问题。谷歌似乎也在这个主题上返回了相当模糊的结果。有解决方案吗?

只是一个猜测,但是,你是否得到一个关于初始化的警告,将双精度转换为浮点数(使用MSVS)?或者可能它搞砸了b/c,所有东西最终都被转换为'4'的整数b/c ?

如果是,问题是当你输入一个数字时,它是一个双精度数。但是你把它当作浮点数来使用,为了解析它,那个数字需要是被强制转换的。例如

sphereSA = ((float) 4 * (float) PI * radius * radius);

但是,最好给编译器一些关于PI的类型信息。例如

namespace MyConstants {
    const float PI = 3.141;
}
sphereSA = ((float) 4 * MyConstants::PI * radius * radius);

您正在使用C风格强制转换。强制类型转换的语法在c++中发生了变化。您需要查找如下内容:

dynamic_cast<something*>( yourthing );