草庐IT

c++ - Windows 和 Linux 中 C++ 中 double 的精度位数不同。为什么? Linux显示超过20个非零精度数字

刚刚做了这个:doubleval1=numeric_limits::max();cout.precision(70);cout在Windows中,我在17位数字(小数点后16位数字)后开始得到0。然而在Linux中,当我不断增加cout.precision(NUMBER)时,越来越多的数字不断显示并且它们不是零。此外,运行以下代码在Windows和Linux上都会显示“15”。Windows系统是32位的,Linux系统是64位的,如果有区别的话。typedefstd::numeric_limitsdl;cout谁能帮忙解释一下这是怎么回事?我认为Windows和Linux中的精度位数

c++ - 简单的 HTTP 服务器库

什么是简单的http服务器库的好选择?它不需要高性能。我宁愿寻找一些简单的REST/JSON通信(“API”)。它必须能够在多线程环境中工作,并且必须能够处理大型POST请求。有什么建议吗?我已经尝试过cpp-netlib但这对于如此简单的任务来说似乎太复杂了......编辑:我正在寻找真正轻量级和简单的东西。例如。就像Ruby世界中的Sinatra。Poco对我来说是另一个过于重量级库的例子。 最佳答案 第一个想到的是Poco库(http://pocoproject.org/)跨平台、稳定、文档齐全。虽然库本身提供的功能可能超出您

c++ - 如何从动态库中调用未知函数?

我需要实现从.so调用函数的能力,而无需在编译时了解该函数。我只会在运行时提供该信息。我该怎么做?我们可以假设我要调用的函数是从库中导出的,库端不需要做任何事情。函数签名在编译时是未知的。操作系统是RaspberryPI上的Linux。 最佳答案 dlopen和dlsym(或它们的Windows等效项)允许您加载文件名在运行时确定的“共享对象”(已编译代码的模块),然后检索其名称也在运行时确定的子例程的函数指针。然而,每个这样的函数的类型签名——要传递的参数的数量和类型——在编译时必须仍然是已知的,这样你就可以转换void*由dls

c++ - 用 C++ 编写可移植动态加载库的最简单方法是什么?

我正在开发一个项目,该项目有多个相似的代码路径,我想将它们从主项目中分离到插件中。该项目必须保持跨平台兼容,我研究过的所有动态库加载API都是特定于平台的。创建一个无需额外修改代码即可在多个操作系统上编译和运行的动态库加载系统的最简单方法是什么?理想情况下,我想编写一个插件,并让它在项目支持的所有操作系统上运行。谢谢。 最佳答案 您必须为加载系统使用平台相关代码。在Windows上加载DLL与在Unix上加载共享对象是不同的。但是,通过几个#ifdef,您将能够在加载程序中拥有大部分相同的代码库。话虽如此,我认为您可以让您的插件平台

c++ - 帮助编译和使用boost c++库

我正在开发一个C++项目,我想在其中使用boost的序列化库。我从boost的主页下载并安装了最新的boost库。当我尝试编译和运行boost的演示序列化示例之一时,我遇到了如下所示的各种错误:/usr/local/include/boost/archive/detail/iserializer.hpp:173:undefinedreferenceto`boost::archive::archive_exception::~archive_exception()'./demo.o:Infunction`voidboost::archive::detail::save_non_point

c++ - 别人的库#define命名冲突

很难为这个问题想出一个合适的标题。无论如何...我目前正在研究GUI我的游戏在SDL.当出现奇怪的错误时,我已经完成了软件绘图并正准备开始其中的OpenGL部分。我包含了“SDL/SDL_opengl.h”header并进行了编译。它抛出“错误C2039:‘DrawTextW’:不是‘GameLib::FontHandler’的成员”,这是一个足够简单的错误,但我没有任何称为DrawTextW的东西,只有FontHandler::DrawText。我搜索DrawTextW并在header“WinUser.h”中的#define调用中找到它!//WinUser.h#defineDrawT

c++ - 二进制文件和跨平台兼容性

我编写了一个C++库,可以将我的数据(自定义结构的集合等)保存到二进制文件中。我目前在我的Windows(XP)机器上本地使用(即创建和使用)这些文件。为简单起见,让我们将库分为两部分:编写器(创建文件)和读取器或消费者(简单地从文件)。但最近,我还想在我的Linux机器上使用(即读取)我在我的XP机器上创建的数据文件。在此阶段我必须指出两台机器都是PC(因此具有相同的endianess等)。我可以构建一个阅读器(并为Linux[准确地说是Ubuntu9.10]编译),因为我是图书馆的创建者。在我踏上这条道路(构建阅读器等)之前,我的问题是:假设我已经成功地为Linux构建了阅读器,我

c++ - 为什么 g++ 不链接我创建的动态库?

我一直在尝试制作一些都依赖同一个库的应用程序,动态库是我的第一个想法:所以我开始编写“库”:/*ThinFS.h*/classFileSystem{public:staticvoidcreate_container(stringfile_name);//Createsanewcontainer};/*ThinFS.cpp*/#include"ThinFS.h"voidFileSystem::create_container(stringfile_name){cout然后我编译“库”g++-shared-fPICFileSystem.cpp-oThinFS.o然后我快速编写了一个使用该库

c++ - 如何避免大型代码库中的常见错误?

有没有办法取消对chars和wchar_t的字符串和wstrings上的+=的定义?基本上我想避免像下面这样的错误:intage=27;std::wstringstr=std::wstring(L"User'sageis:");str+=age;std::stringstr2=std::string("User'sageis:");str2+=age;上面的代码会将ascii字符27添加到字符串中,而不是数字27。我显然知道如何解决这个问题,但我的问题是:在这种情况下如何产生编译器错误?注意:您可以覆盖std::string和int上的+=以正确格式化字符串,但这不是我想要做的。我想在

Java 包与 C++ 库

在Java中,有一个叫做package的东西。C++中的library是否表示相同的含义,尤其是在包含相关类的示例和protected成员的使用方面?谢谢。 最佳答案 package在Java中有不同的含义。作为将内部类名称与其他包中类名称区分开来的容器,它的等价物是c++namespaces。作为保证非私有(private)成员访问同一block中的类的单元,C++中没有等效项。授予类的访问级别独立于定义该类的命名空间。作为在磁盘中对源进行排序的一种方式,没有等效的方法,C++语言对代码在文件中的存储方式没有要求。关于c++库,更