草庐IT

C++11:Variadic模板函数参数包扩展执行顺序

考虑以下代码:templatesize_tf(Tt,size_t&x){returnx++;}templatevoidg(Args...args){size_tx=0;size_ty[]={f(args,x)...};for(size_ti=0;iC++11标准保证断言不会触发吗?为什么或为什么不? 最佳答案 是的,它保证不会开火。请参阅以下引述:§14.5.3可变模板:Packexpansionscanoccurin[...]aninitializer-list;thepatternisaninitializer-clause.§

c++ - std::string::max_size() 作为静态成员

为什么max_size不是std::string的静态成员?这可以编译,但我觉得奇怪的是所有字符串共有的属性只能通过字符串的实例访问:std::size_tmax_size=std::string().max_size();为什么会这样实现? 最佳答案 Whyisn'tmax_sizeastaticmemberofstd::string?因为max_size返回值取决于字符串实例内部使用的分配器实例。 关于c++-std::string::max_size()作为静态成员,我们在Stac

c++ - QtCreator 调试器不显示 std::string 的值

我试图调试我的小词法分析器并遇到了这个问题:QtCreator-Debugger不显示我的std::string-variable的任何内容。我尝试在控制台中对其进行调试,但得到了相同的结果,只是简单的结构信息。我前几天用的那个版本的QtCreator确实显示了字符串的内容。所有其他STL元素,如std::vector、std::map、std::multimap等显示正确的数据,只是std::string类不正确。经过几个小时的谷歌搜索后,我发现了很多描述pretty-print创建的网页,我解决这个问题的非常笨拙的方法并没有帮助。我有什么想法可以摆脱这个错误吗?注意:字符串变量的“

c++ - 哪种数据结构支持高效删除和随机访问?

我正在寻找一种数据结构,我可以在其中有效地删除项目并支持随机访问。我还需要有效的插入,但由于元素的顺序并不重要,我认为我可以为它可能必须存储的最大元素数预分配内存,然后始终将新元素放在末尾,这样就不会重新分配或移动其他元素是必要的。据我所知,链表非常适合删除,但访问其元素可能需要O(n)时间。另一方面,一个简单的数组(例如C++中的vector)具有随机访问属性,但从这样的结构中删除一个元素的复杂度为O(n)。实际上,随机访问要求比我真正需要的要强。我只需要能够随机均匀地选择结构的一个元素。显然高效的访问属性意味着我需要的操作效率,但我不确定这两者是否等同。提前致谢!

c++ - 为什么在一个类中使用 uint64_t 需要比 2 个 uint32_t 更多的内存?以及如何防止这种情况?

我做了下面的代码作为例子。#includestructclass1{uint8_ta;uint8_tb;uint16_tc;uint32_td;uint32_te;uint32_tf;uint32_tg;};structclass2{uint8_ta;uint8_tb;uint16_tc;uint32_td;uint32_te;uint64_tf;};intmain(){std::cout打印202484因此很容易看出一个uint64_t与两个uint32_t一样大,为什么类2会有4个额外字节,如果它们除了用两个uint32_t替换一个uint64_t之外是相同的。

c++ - 对于具有默认分配器的标准容器,std::container::size_type 是否保证为 size_t?

喜欢:std::string::size_typestd::list::size_typestd::map::size_typestd::vector::size_type等等两者都是cplusplus.com和cppreference.com说他们通常是size_t,但它们是否真正、明确地保证为size_t的标准除非使用自定义分配器? 最佳答案 对于STL容器-不。[container.requirements.general]中标准的表96,其中列出了任何容器的容器要求X,解释得很清楚:但是,对于basic_string,siz

c++ - std::vector::resize(size_type) 需要 CopyInsertable?

这个问题是在我回答thisanotherquestion的时候提出的.N333723.3.6.3“vector容量”说(在770页):voidresize(size_typesz);Effects:Ifsz,equivalenttoerase(begin()+sz,end());.Ifsize(),appendssz-size()value-initializedelementstothesequence.Requires:TshallbeCopyInsertableinto*this.然而,clang++saysit'sokaythoughTisnotcopyable.我认为resiz

c++ - 制作 std::vector capacity>=N 和 size=0 的最佳方法?

给定一个std::vector,其大小和容量可以是任意的,将其大小更改为0并将容量更改为至少N(给定数字)的最佳做法是什么?我的直接想法是:voidf(vector&t,intN){t.clear();t.reserve(N);}但是我注意到了Areallocationisnotguaranteedtohappen,andthevectorcapacityisnotguaranteedtochange(whenstd::vector::cleariscalled).所以我想知道当原始容量大于给定的N时如何避免重新分配? 最佳答案 w

c++ - 确定哪些目标文件导致 .dll 大小增加 [C++]

我正在开发一个大型的C++构建的库,该库最近有了显着的增长。由于它的大小,导致这种大小增加的原因并不明显。您对可以帮助确定增长来源的工具(msvc或gcc)有什么建议吗?编辑我尝试过的事情:转储最终的dll、obj文件、创建map文件并翻录它。再次编辑所以objdump和python脚本似乎已经完成了我想要的。 最佳答案 如果是gcc,objdump.如果是visualstudio,dumpbin.我建议对旧(小)库和新(大)库的工具输出进行比较。 关于c++-确定哪些目标文件导致.dl

c++ - 如何用 C++ 编写 "meta if else if.."?

我只是在学习C++元编程的基础知识,我想看看其他人如何解决以下问题会很高兴。此外,很高兴看到使用Boost元编程库的解决方案,因为我认为它们是我的黑暗角落。所以问题是,可以更优雅地重写吗?假设我们有以下结构:templatestructtype_factory{typedeftypenametype_factory_impl::typetype;};这个结构应该是typedeftype,这取决于size的值。type_factory_impl是type_factory的实现。用于确定类型的算法是:if(size%bits::value==0)typedefunsignedlonglon