srand (time (null)) causes compiler warning: implicit conversion loses integer precision(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))导致编译器警告:隐式转换丢失整数精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Srand(time(NULL))导致编译器警告:隐式转换丢失整数精度


基础教程推荐
- 这个宏可以转换成函数吗? 2022-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 常量变量在标题中不起作用 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 我有静态或动态 boost 库吗? 2021-01-01