Srand(time(NULL))导致编译器警告:隐式转换丢失整数精度 [英] srand (time (null)) causes compiler warning: implicit conversion loses integer precision

查看:0
本文介绍了Srand(time(NULL))导致编译器警告:隐式转换丢失整数精度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果此问题已得到回答,请原谅。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main () {

srand( time(NULL) );
cout << rand();
}

"隐式转换丢失整数精度:‘time_t’(又名‘long’)到‘unsign int’"

是我在执行上面的代码时收到的错误消息。我使用的是Xcode4.6.1。现在,当我使用不同的编译器时,例如来自coadead.org的编译器,它执行得非常好,生成看起来像随机数的东西,所以我假设这是一个Xcode问题,我需要解决?

我刚刚开始编程,所以在这方面我完全是个初学者。是我的代码有问题还是编译器有问题?

如有任何帮助,我们将不胜感激!

推荐答案

"隐式转换丢失整数精度:‘time_t’(又名‘long’)到‘unsign int’"

由于time()返回的long大于目标上的unsigned int,因此您正在隐式失去精度。为了解决此问题,您应该显式转换结果(从而消除"隐式精度损失"):

srand( static_cast<unsigned int>(time(nullptr))); 

考虑到现在是2017年,我编辑这个问题是为了建议您将<chrono>中定义的std::chrono::*提供的功能视为C++11的一部分。您最喜欢的编译器是否提供C++11?如果不是,它真的应该!

若要获取当前时间,应使用:

#include <chrono>

void f() {
    const std::chrono::time_point current_time = std::chrono::system_clock::now();
}

time()起作用时,我为什么要担心这个?

IMO,只有一个原因就足够了:明确、显式的类型。当您在足够大的团队中处理大型程序时,了解传递的值代表的是时间间隔还是"绝对"时间,以及大小是至关重要的。使用std::chrono,您可以设计可移植的接口和数据结构,并跳过is-that-timeout-a-deadline-or-milliseconds-from-now-or-wait-was-it-seconds Blues。

这篇关于Srand(time(NULL))导致编译器警告:隐式转换丢失整数精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆