草庐IT

C++标准

全部标签

c++ - 按事件类型分析程序

典型分析器的输出是代码中的函数列表,按程序运行时每个函数所用的时间排序。这很好,但有时我更感兴趣的是程序大部分时间在做什么,而不是EIP大多数时间在哪里。我假设的分析器的示例输出是:WaitingforfileIO-19%ofexecutiontime.Waitingfornetwork-4%ofexecutiontimeCachemisses-70%ofexecutiontime.Actualcomputation-7%ofexecutiontime.有这样的分析器吗?是否可以从“标准”分析器中得出这样的输出?我使用的是Linux,但我很高兴听到任何适用于其他系统的解决方案。

c++ - 对标准库分配器指针类型的要求

我正在尝试编写一个四叉树稀疏矩阵类。简而言之,一个quadtree_matrix是零矩阵或四元组(ne,nw,se,sw)的quadtree_matrix.我最终想测试不同的分配方案,因为这可能会影响线性代数运算的性能。所以我也会模板quadtree_matrix在标准分配器类型上,以便我可以重用现有的分配器。我将不得不分配两种不同类型的数据:T,或node,其中包含四个指针(指向T或节点)。对于我将考虑的所有算法,我肯定知道期望什么样的数据,因为我知道在算法的任何一点我所面对的子矩阵的大小是多少(我什至不需要存储这些大小)。我当然会使用两个不同的分配器:这没关系,因为分配器类型提供了

c++ - 是否未指定标准库头文件是否包含任意头文件?

WhichheadersintheC++standardlibraryareguaranteedtoincludeanotherheader?中有一项claim:TheC++standardlibraryheadersmayincludeeachotherinunspecifiedways,soprogrammersgenerallyshouldn'tdependononeheaderincludinganother.[...]在实践中往往是这样的。例如,可能包括,在其他情况下你需要包括明确地。但是,我似乎无法在N4140中找到这种情况。我看过了:§2.9[lex.header]§17

C++标准歧义

据我在标准中所见,以下代码是有效的。它在MSVC1025中编译。conststructomg;structomgvolatile;intmain(){return0;}限定符const和volatile在这些声明中似乎毫无意义。它们既不会帮助也不会伤害编译器和程序员。该标准似乎并不打算消除这些“空洞的歧义”。在空声明;的情况下,它是明确允许的。是否还有其他标记在预处理后与表达式的含义无关的情况? 最佳答案 两者都是clang和gcc使用-pedantic-errors拒绝此代码。clang提供以下错误:error:'const'is

c++ - C++ 标准中哪里说::delete 可以更改左值?

我遇到了我的第一个编译器,它更改了传递给::delete的左值,但没有将左值清零。以下是正确的:Foo*p=newFoo();Foo*q=p;assert(p!=0);assert(p==q);::deletep;assert(p!=q);assert(p!=0);请注意,删除操作后p不为零,它已从旧值改变。一位同事告诉我,根据他使用一些大型机C++编译器将p更改为0xFFFFFFFF以及将p更改为0的其他编译器的经验,这并不罕见。在C++标准中哪里说允许编译器这样做?通过StackOverflow搜索,我发现了这个问题:Whydoesn’tdeletesetthepointertoN

c++ - 如何确定 float 的上限和下限?

我对下面的引述(N3797,3.9.1/8)有疑问:Thevaluerepresentationoffloating-pointtypesisimplementation-defined.据我所知,它在定义float的边界方面给予了实现完全的自由。它们在templateclassnumeric_format中指定.例如,#include#includeintmain(){std::cout().max()().min()().max()().min()DEMO我的问题是:float的上限和下限可以任意高低,还是有限制?纯C是否也为float提供一组实现定义的值?我怀疑这取决于我们正在使

c++ - 函数返回 void 的无序函数评估

C和C++中是否有一种方法可以使返回void的函数以未指定的顺序求值?我知道函数参数以未指定的顺序求值,因此对于不返回void的函数,这可用于以未指定的顺序求值这些函数:#includeinthi(void){puts("hi");return0;}intbye(void){puts("bye");return0;}intmoo(void){puts("moo");return0;}voiddummy(inta,intb,intc){}intmain(void){dummy(hi(),bye(),moo());}由符合规范的编译器编译的合法C和C++代码可以按任何顺序打印hi、bye和

c++ - 是否有标准名称(模板或宏)来替换 ARRAY_SIZE、_countof 等?

我不是在谈论std::array或任何东西,只是经典的VanillaC/C++数组。我知道可以实现ARRAY_SIZE/_countof的各种方式,我只是想知道他们是否已经设法为此标准化了一个名称(在std::我假设)。如果没有,是否有相关建议? 最佳答案 当前的解决方法std::extent-数组的大小如果您正在使用native数组,您可以使用std::extent来自,用于生成数组的Nth维(默认为第一个)中的元素数。inta1[1024];inta2[std::extent::value];//int[1024]一点间接(通用

c++ - 编译器找不到 "aligned_alloc"函数

尝试获得一个可移植的函数以在具有对齐特征的堆上进行分配。找到“aligned_alloc”,我认为它在stdlib.h中,但gcc似乎不这么认为error:'aligned_alloc'wasnotdeclaredinthisscope使用带有标志-std=c++11-m64的gcc尝试导入#include#include 最佳答案 aligned_alloc在C11中定义。它(还)没有为C++定义,尽管它可能会出现在C++17中。(也就是说,它不在标准C库中预期在标准C++库中可用的(当前)209个函数列表中。请参阅C++标准的附

c++ - 在标准 (C++14) 的哪个地方说以下两个声明是等价的?

structA{};intA;structAa;structA::Ab;上面的最后两个声明是等价的。它们都声明了类型A的对象。我可以在标准中的什么地方找到或推断出这一点? 最佳答案 [类]/2:Aclass-nameisinsertedintothescopeinwhichitisdeclaredimmediatelyaftertheclass-nameisseen.Theclass-nameisalsoinsertedintothescopeoftheclassitself;thisisknownastheinjected-cla