草庐IT

c++ - 其他库中的编译器警告

我将我的C++代码链接到几个库(其中几个库主要基于header),其中一些已经有一段时间没有更新了。我一直在GCC4.0上使用-Wall和Wextra编译我的代码一段时间,没有出现任何警告或错误。但是,现在我使用的是较新版本的GCC(4.3),我的一些文件一直在打印来自其他库的包含文件的警告(例如,warning:typequalifiersignoredonfunctionreturntype当库的模板化代码在返回的指针上使用restrict关键字时)。同样,当我使用GCC4.1编译时,我正在使用的集群上的一个稍旧版本的OpenMPI打印出许多警告。问题是:当离开本地目录以读取头文件

c++ - 外部链接的 C 库中的异常传播

我正在编写一个使用外部第三方C库的C++库。所以我的库将调用这个第三方库中的函数,而第三方库将回调到我的库的不同部分。我想知道在这种情况下异常会发生什么?假设MyLib::foo()调用外部C库函数,最终调用MyLib::bar(),bar抛出异常,会发生什么?异常是否会正确传播到foo()中的处理程序?谢谢! 最佳答案 Willtheexceptionbecorrectlypropagatedtoahandlerinfoo()?我认为异常是否通过外部C代码传播是未定义的。更糟糕的是,C代码毫无准备,无法处理异常。C代码不需要免疫突

c++ - GNU C 库中 PRNG 的周期是多少?

是否有任何关于gcc的g++中随机数生成器的周期性的文献(如果我们不重新设置函数的种子)?我想我可以自己进行测试,但最好能获得经过充分验证的研究。预先感谢您的帮助。//编辑我只是想补充一点,我已经用多个引擎进行了相当多的搜索,但没有找到任何具体的内容。我只阅读了关于周期性受表示种子所需位数限制的一般性评论。(所以我想考虑到srand通常随时间调用,周期性不会超过10^12左右。但在我开始实现我的算法之前,更明确的东西会非常有帮助。) 最佳答案 在rand(3)手册页中搜索时,我发现了这个:Theversionsofrand()and

c++ - 特征库中的多维数组

关于优秀eigen库的使用和future的3个简单问题:为什么不能通过matrix[i][j]访问矩阵,而只能通过matrix(i,j)访问矩阵?是否有实现此类语法的计划?是否会实现多维数组matrix[n][m]...[l]?我非常喜欢eigen库,它快速且易于使用。我唯一缺少的是真正的多维数组。 最佳答案 新的Tensor模块支持多维数组:http://eigen.tuxfamily.org/dox-devel/unsupported/group__CXX11__Tensor__Module.html

c++ - 在新的 C++ 库中处理多种字符串类型

C++的一件事是多个字符串,或者说字符类型:char、wchar_t、char16_t、char32_t。因此,我们有不同的字符串类型定义:std::string、std::wstring、std::u16string和std::u32string,它们是不同的字符串类型。而且还不止于此,如果我们谈论的是Windows和COM,还有平台类型,例如BSTR。我们甚至还没有开始谈论字符编码。如果您正在构建一个新库,其中一项要求是支持所有这些字符串类型或字符类型,您会怎么做?让我们暂时忘掉字符编码。我在考虑这个问题,然后提出了几个选项,但没有一个是理想的。假设您有一个registry_key

c++ - 不同库中的相同符号和链接顺序

我有2个库:test.1和test.2。这两个库都包含一个全局extern"C"voidf();函数,具有不同的实现(只是一个用于测试的cout)。我做了以下测试:测试1动态链接:如果我在可执行文件的makefile中添加libtest.1.so然后libtest.2.so然后调用f();main,libtest.1.so->f()被调用。如果我更改makefile中的顺序,将调用libtest.2.so->f()测试2静态链接:静态库完全一样测试3动态加载由于库是手动加载的,所以一切都按预期进行。我预计多个定义会出现错误,但这显然没有发生。此外,这并没有打破单一定义规则,因为情况不同

c++ - 从 C++ 引用静态库中的 C 函数

我有一个用C编写的静态函数库。假设头文件名为myHeader.h,如下所示:#ifndefMYHEADER_H#defineMYHEADER_Hvoidfunction1();voidfunction2();#endiffunction1和function2没什么特别的。假设它们存在于一个名为impl1.c的文件中,该文件如下所示:#include"myHeader.h"voidfunction1(){//code}voidfunction2(){//morecode}到目前为止提到的所有代码都被编译到一些名为libMyLib.a的静态库中。我宁愿不修改用于构建此库的任何代码。我还有一

c++ - 无法使用 GDB 进入共享库中的函数

我正在尝试调试一个使用GDB从许多共享库构建的应用程序。gdb的开始:prompt$gdbGNUgdb(GDB)RedHatEnterpriseLinux(7.2-50.el6)Copyright(C)2010FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"and"showwarra

c++ - 共享库中的内部异常终止最终用户应用程序

我正在构建一个内部使用Boost.thread的共享库。因此,Boost.system也被使用,因为Boost.thread依赖于它。我的共享库导出一个C接口(interface),所以我想对最终用户隐藏所有内部异常处理和线程使用等。可以这么说,它应该是一个黑匣子。但是,当我链接到客户端应用程序时,程序运行良好-一旦需要通过调用库函数来停止处理,我就会得到:在抛出“boost::thread_interrupted”实例后调用终止我在库内部捕获了这个异常,所以我不知道为什么它实际上没有被捕获。最终用户的程序无意以任何方式了解或处理Boost异常。在构建共享库时,我对Boost.thre

c++ - 什么是英特尔 IPP 库中的外线程?

我正在阅读英特尔的IntegratedPerformancePrimitivesC和C++库。他们提到外线程是新功能之一。NewAPI’sforexternalthreadingismoreeffectivethaninternalthreading.source什么是外线程,它与C++中的std::thread有什么关系? 最佳答案 在IPP中:内部线程-在原语中外线程-在应用程序级别IntelIPP8.2continuesdeprecationofinternalthreadingthatwasstartedinversion7