C++ *1.0在此代码中起什么作用?

C++ *1.0在此代码中起什么作用?,c++,visual-studio-2010,primes,C++,Visual Studio 2010,Primes,以下是检查数字是否为素数的代码: bool IsPrime(int num) { if(num<=1) return false; if(num==2) return true; if(num%2==0) return false; int sRoot = sqrt(num*1.0); for(int i=3; i<=sRoot; i+=2) { if(num%i==0)

以下是检查数字是否为素数的代码:

bool IsPrime(int num)
{
    if(num<=1)
        return false;
    if(num==2)
        return true;
    if(num%2==0)
        return false;
    int sRoot = sqrt(num*1.0);
    for(int i=3; i<=sRoot; i+=2)
    {
        if(num%i==0)
            return false;

    }
    return true;
}
bool-IsPrime(int-num)
{

如果(num乘以
1.0
num
强制为
double
。您可以通过显式强制转换执行相同操作。

它执行num x 1.0,因此如果num为5,则为5 x 1.0
sqrt()方法以double作为参数,在
num*1.0
中取5.0

num
首先提升为
double
,因此结果是
double
,然后传递到
double sqrt(double)
。否则,您可能需要使用
sqrt(static_cast(num))


通常,您不需要强制转换,因为存在从
int
double
隐式强制转换。请参阅。

如果没有它,您可能会得到一个不明确的重载编译器错误。实际上,它将
int
强制转换为
double
。在我看来,这不是最清晰的方式。只是
静态强制转换
它。@GManNickG-它将
int
转换为
double
。此代码中没有强制转换。@KhoderSarm编译器将结果向下协调为
int
,截断小数部分。@KhoderSarm
sqrt
接受一个double并重新返回一个double。
*1.0
将参数强制转换为double,这没有任何意义ng与返回类型有关。由于
sRoot
是一个int,因此
sqrt
的返回值将从双精度转换为int。@Khoder可以通过截断小数部分将浮点值隐式转换为整数值。编译器应该对此发出警告。@MohammadAliBaydoun-返回值将被转换为d、 强制转换是您在代码中编写的命令编译器进行转换的东西。@PeteBecker对了,我一直忘了这个区别。