草庐IT

C++标准

全部标签

c++ - 具有复数的任意精度线性代数 c/c++ 库

我正在进行一项研究,涉及4维相空间中具有复数系数的线性微分方程。为了能够检查关于解的根的一些假设,我需要能够以任意精度在数值上求解这些方程。我曾经使用mpmathPython模块,但它运行缓慢,所以我更喜欢用C/C++重写我的程序以获得最大性能。所以我有一个问题:是否存在同时支持任意精度算术和复数的C/C++线性代数库?我需要一些基本功能,如点积等。(其实我也需要矩阵指数,但如果有需要我可以自己实现)。我尝试使用Eigen与MPFRC++,但由于它不支持复数这一事实而失败(并且像complex这样的构造不起作用,因为它假定基本类型是标准float)。 最佳答

c++ - 来自 exception::what() 的异常描述是否标准化为标准异常?

对于像std::bad_alloc这样的标准化异常,exception::what()返回的字符串在不同的编译器中是否应该相同?例如,我使用过的几个编译器都会为bad_alloc::what()返回badallocation。是否有某种原因没有返回更具描述性的字符串,例如Memoryallocationfailure? 最佳答案 Isthestringreturnedbyexception::what()expectedtobethesameacrosscompilers?不,这不是标准化的。以你的bad_alloc为例:[C++1

c++ - 如何调用 clang++ 或 g++ 来准确复制两个不同标准版本中的需求

我试图确定N3337§8.5p7(C++11)和N3797§8.5p8(后C++11)之间处理值初始化的差异。N3337§8.5p7:Tovalue-initializeanobjectoftypeTmeans:ifTisa(possiblycv-qualified)classtype(Clause9)withauser-providedconstructor(12.1),thenthedefaultconstructorforTiscalled(andtheinitializationisill-formedifThasnoaccessibledefaultconstructor);

c++ - 为什么未初始化的 const 成员在 C 中的处理方式与在 C++ 中的处理方式不同?

这个问题在这里已经有了答案:constinCvsconstinC++(5个答案)关闭7年前。我为要链接的库包含一个Cheader。header有一个结构foo,我想在其中声明一个新变量bar。我收到编译器错误:error:uninitializedconstmemberin"structfoo"这些成员需要初始化是有道理的,因为以后不能为它们赋值。但是使用这个库的C程序可以做完全相同的事情并且它可以工作。C和C++标准有区别吗?这只是一个示例。实际上,我指的是libmtd.h(mtd-utils)中的结构mtd_dev_info。http://mtd-utils.sourcearchi

c++ - 当使用位域 union 替换位掩码时,访问非事件成员,好还是未定义?

来自thisquestion我了解到匿名结构和union已成为C11标准的一部分(来自评论)。然后我想用bitfieldunion来代替bitmask可能是个好主意,我发现其他人已经发布了一个问题并显示了anexample。,这和我的想法完全一样。该问题的答案同意使用位域union方法替换位掩码的安全性。但是,thepostthere的答案,据我了解,否认访问不活跃的union成员的安全性,说访问不活跃的union成员是未定义的行为。我认为这两个问题的答案是矛盾的:仅使用theexamplethere,在修改.user后,.raw的值会变成undefined(通过对thepost的回答

c++ - 在 C++ 中,如何重用已完成执行的标准线程?

我的C++方法的main()方法中有这行代码:std::threadfoo(bar);这很好用。但是,我想根据外部输入随时运行同一个线程。我怎样才能重新使用这个线程来再次运行线程?我这样做的原因是我有两个函数需要同时运行:一个是阻塞函数,接受输入x,并按设定的时间间隔将数据输出到输出。另一个是阻塞并根据外部输入产生输出y。这基本上应该是这样的:intshared_x=0;intproducer_x=0;intconsumer_x=0;std::threadproducer(foo);//Modifiesfoo_xstd::threadconsumer(bar);//Outputsbas

c++ - 不透明和匿名枚举声明如何符合标准要求?

我在N3936(条款7.2.2)中读到“在范围枚举的声明中不应省略可选标识符”,所以我尝试了以下代码(嵌入的评论试图解释我的解释)GNU-g++4.8.3和clang3.4.2#includeenumany:int;//unscopedopaquedeclaration:intrequiredbythestandardenum:int{a}t;//unscopedanonymousdeclarationoft(:intnotrequired)enumany:int{b}u;//redlecarationoftype"any"withoneenumeratorenumclassfoo:c

C++:打印或计算一个标准库容器到控制台

打印或cout的C++方式是什么?一个C++标准库容器到控制台,查看它的内容?另外,为什么C++库实际上没有重载接线员给你?它背后有什么历史吗? 最佳答案 重载operator对于ostream是要走的路。这是一种可能性:templatestd::ostream&operator(os,""));returnos;}然后你可以简单地写:std::cout这里还有其他一些非常好的解决方案:Pretty-printC++STLcontainers 关于C++:打印或计算一个标准库容器到控制台

C++ 单例 — 不是完整的 C++ 11 标准

我正在努力用C++设计一个线程安全的单例实现,但它主要针对VisualStudio2012环境。我知道C++11标准保证了这一点Foo&Instance(){staticFooinstance;returninstance;}是线程安全的。但是VisualStudio2012中使用的编译器还没有完全符合C++11标准(至少在静态变量初始化的线程安全方面)。所以我想到了这个:#include#include#includeclassFoo{public:staticFoo&Instance();private:Foo(){init();}Foo(Fooconst&);voidoperat

c++ - C/C++ : What's faster: a for loop, 或递增指针

我想知道以下哪个代码段最快,假设目标是从T类型的元素中读取数量为numElements的somePointer并用它们做一些事情。我特别感兴趣的是循环结构本身的效率,而不是对元素所做的事情。第一候选人for(inti=0;i第二个候选人T*tempPointer=somePointer;T*endPointer=somePointer+numElements;while(tempPointer当然,第一个候选人更清晰,更不容易出错。但是,如果它实际上被编译成它似乎会生成的代码,我认为它会更慢。使用for循环需要在每次循环迭代时增加i,以及从somePointer指向的地址偏移>i*si