草庐IT

C++标准

全部标签

c++ - 标准算法按值采用 Lambda 是否有原因?

这个问题在这里已经有了答案:Whythesequence-operationalgorithmspredicatesarepassedbycopy?(3个答案)关闭6年前。所以我在这里问了一个问题:LambdaWorksonLatestVisualStudio,butDoesn'tWorkElsewhere我得到的答复是,我的代码是自标准25.1[algorithms.general]10以来定义的实现:Unlessotherwisespecified,algorithmsthattakefunctionobjectsasargumentsarepermittedtocopythose

c++ - 内存映射文件和指向易失对象的指针

我对C和C++中volatile语义的理解是它将内存访问变成了(observable)sideeffects.每当读取或写入内存映射文件(或共享内存)时,我都希望指针是volatile限定的,以表明这实际上是I/O。(JohnRegehr在volatile的语义上写了一篇非常好的article)。此外,我希望使用像memcpy()这样的函数来访问共享内存是不正确的,因为签名表明volatile限定被丢弃,并且内存访问不被视为我/哦。在我看来,这是一个支持std::copy()的论点,其中volatile限定符不会被丢弃,内存访问被正确地视为I/O。但是,我使用指向volatile对象的

c++ - 在运行时从应用程序读取调试信息

我有一些关于调试符号的问题,以及可以用它们做什么,除此之外,好吧,调试。我最感兴趣的是关于GCC的答案,但我也很高兴知道它在其他编译器(包括MSVC)下的样子。首先:调试符号的常见格式/类型是什么?它们与编译器和平台有什么关系?平台间的GCC和MinGW格式是否始终相同?我可以在运行时检查构建是否有它们以及它们的格式是什么?还有一些更实际的问题......我怎样才能:检查当前文件和行号?获取正在执行的(限定的)函数名?获取完整的当前堆栈跟踪?我要强调一下,我说的是运行时检查。所有这些都可以由GDB读取和pretty-print,但我不知道有多少信息来自调试符号本身,有多少信息来自GDB

c++ - 模板模板模板参数是扩展还是标准的一部分?

我正在搜索与模板模板参数相关的其他内容,偶然发现了thisanswer它声称标准不允许模板模板参数。但是,以下代码在最新的clang(3.2)和最新的GCC(4.8)中编译:templateclass>classT>structtest{};templateclassT>structfoo{};testbar;这是一个扩展,还是其他答案实际上是错误的并且是标准允许的?如果不是,是否有任何特殊原因遗漏? 最佳答案 在std::vector类模板std::vector传递类型int作为参数。在std::get(some_tuple),函

c++ - 使用 C/C++ 作为脚本语言

我正在尝试创建一个将C/C++用作“脚本语言”的架构。我已经有一个原型(prototype)基于:http://www.codeproject.com/Articles/29999/Compiling-C-code-at-runtime和http://runtimecompiledcplusplus.blogspot.com我的原型(prototype)允许我重新编译动态链接库/共享对象并在运行时重新加载它。我只有一个小问题让我们以下面的代码为例:[bot.c]typedefstruct{floathealth;floatspeed;boolalive;}Bot;Botbot={.he

不同编译器中的 C++ 标准库实现

我想知道在不同的C++编译器中使用了哪些C++标准库。我尝试搜索它,但找不到完整的列表。我知道msvc和icc使用Dinkumware的实现,gcc使用libstdc++,clang使用libc++。但是DigitalMarsC++、Embarcadero的bcc或IBM的xlC++呢? 最佳答案 入围名单:GCC:使用自己的libstdc++。MSVC:使用自己的msvcrp,它是从Dinkumware购买的,然后被分解以解决MSVC糟糕的C++语言支持(因此它不再是真正的Dinkumware)。Clang:如果传递了-stdli

c++ - 标准在哪里定义 volatile 变量可以更改?

标准在哪里定义volatile变量可以改变未被发现?我找到了两个关于volatile的规范文本:intro.execution/7:Readinganobjectdesignatedbyavolatileglvalue([basic.lval]),modifyinganobject,callingalibraryI/Ofunction,orcallingafunctionthatdoesanyofthoseoperationsareallsideeffects,whicharechangesinthestateoftheexecutionenvironment.Evaluationof

c++ - 转换为无符号时,标准表示结果为 "the least unsigned integer"。为什么 "least"在这里很重要?

C++标准在[conv.integral/2]中说,关于整数转换为无符号:Ifthedestinationtypeisunsigned,theresultingvalueistheleastunsignedintegercongruenttothesourceinteger(modulo2nwherenisthenumberofbitsusedtorepresenttheunsignedtype).我的问题是,为什么会有“最少”这个词?有没有可能有多个结果,我们需要从中选择一个? 最佳答案 有无限多个整数等于任何值k模2n。有k,k

c++ - 链接器错误:对 `std::ctype<char>::_M_widen_init() 的 undefined reference

我在尝试运行示例项目时遇到链接器错误。你能告诉我如何解决这个问题吗?提前致谢。make[1]:Enteringdirectory`/home/rumi/MobiusProject/Multiproc-Paper/Transformer/ssg'/usr/bin/g++-w-DMOBIUS_LITTLE_ENDIAN-DMOBIUS_LINUX-m32-ossgGen_Linux-L../../lib/Linux_lib/-L/home/rumi/Mobius/mobius/Mobius-2.3/Cpp/lib/Linux_lib-L/home/rumi/Mobius/mobius/Mo

c++ - 如何处理浮点计算中的超精度?

在我的数值模拟中,我有类似于以下片段的代码doublex;do{x=/*somecomputation*/;}while(x对于某些平台(例如linux、x87数学)上的某些编译器(例如gcc),可能会出现x以高于double的方式计算(“超精度”)。(更新:当我在这里谈论精度时,我指的是精度/和/范围。)在这些情况下,可以想象比较(x)返回false,即使下一次x被四舍五入降低到double,它变为0。(并且不能保证x不会在任意时间点向下舍入。)有什么方法可以执行这种比较是可移植的,在内联代码中工作,没有性能影响并且不排除一些任意范围(0,eps)?我尝试使用(x::denorm_m