类型铸造/转换困境

时间:2013-02-28 19:43:18

标签: c++ types casting type-conversion

我仍然只是从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))解决此问题,但这并没有解决任何问题。谷歌似乎也在这个问题上回归了相当模糊的结果。有解决方案吗

2 个答案:

答案 0 :(得分:1)

只是一个猜测但是,你是否收到关于初始化将一个double转换为float(使用MSVS)的警告?或者可能它搞乱了b / c所有东西最终都被投射为'4'的整数b / c?

如果是这样,问题是当你输入一个数字时它是一个双倍。但是你将它用作浮点数来解决它,这个数字需要被投射。 E.g。

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

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

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

答案 1 :(得分:-4)

您正在使用C样式演员。使用C ++改变了强制转换的语法。 你想找到这样的东西:

dynamic_cast<something*>( yourthing );
相关问题