提升 microsec_time_clock.hpp 警告 C4244

Posted

技术标签:

【中文标题】提升 microsec_time_clock.hpp 警告 C4244【英文标题】:boost microsec_time_clock.hpp warning C4244 【发布时间】:2009-08-27 22:17:19 【问题描述】:

我是使用 boost 的新手,但遇到了问题。我的项目中需要 shared_mutex 函数。所以我已经完成了

#include "boost/thread/shared_mutex.hpp"

并编译了我的项目。我的带有“将警告视为错误”的 MSVC 2005 由于出现警告而停止编译:

c:\\...\microsec_time_clock.hpp(103) : warning C4244: 'argument' : conversion from 'int' to 'unsigned short', possible loss of data

我不知道,为什么 shared_mutex 需要微秒函数(我读过比 boost 库有相当大的依赖列表),但我无法编译我的项目。我google了一下,发现同样的问题,但没有决定。

更新:我现在正在编译 boost,但我想将所有源代码放入我的开源项目,包括 boost.thread.shared_mutex。

【问题讨论】:

发布 boost 的版本号可能会有所帮助。它可以在 boost/version.hpp 中定义的宏 BOOST_LIB_VERSION 中找到 抱歉,我已经发布了我的编译器,但忘记了提升。我有最新的 (1.40.0) 版本。 什么样的代码?我做#include“boost/thread/shared_mutex.hpp”并在microsec_time_clock.hpp中的某处收到警告。 date_type d(curr_ptr->tm_year + 1900, curr_ptr->tm_mon + 1, curr_ptr->tm_mday); ^ 这里。 不包含shared_mutex时它会消失? 是的,因为共享互斥锁是我使用的唯一一个 boost lib。 【参考方案1】:

各种 Boost 库在第 4 级的 Visual Studio 构建中生成各种警告。我们只是禁用它们。

例如,我们的一个预编译头文件有:

#pragma warning(push, 0)
#include <boost/asio.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/noncopyable.hpp>
#include <boost/thread.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/system/error_code.hpp>
#include <boost/xpressive/xpressive.hpp>
#pragma warning(pop)

【讨论】:

im student, not a professional, but i dont 了解 boost 程序员如何编写警告代码,而我们(使用 boost 的程序员)可以忽略这些警告。 我不知道这是否被任何地方的 Boost 文档所涵盖,但 zlib 常见问题解答有一个很好的回应: -- 我明白了......警告......你们不能写正确的代码? -- 许多年前,我们放弃了避免对宇宙中的每个编译器发出警告的尝试。这只是浪费时间,而且一些编译器非常愚蠢。所以现在,我们只需确保代码始终有效。 -- zlib.net/zlib_faq.html#faq35【参考方案2】:

我敢打赌,他们正在对无符号短片做 +=。加法的结果被隐式转换为 int,然后需要向下转换为无符号 short 以进行赋值。

【讨论】:

以上是关于提升 microsec_time_clock.hpp 警告 C4244的主要内容,如果未能解决你的问题,请参考以下文章

一个例子,变量提升和函数提升就是这么简单!

如何理解函数提升

函数提升优于变量提升?

JavaScript系列文章:变量提升和函数提升

变量提升与函数提升

Solr 索引时间提升 VS 查询时间提升?