草庐IT

std=c++11

全部标签

c++ - 在什么情况下我应该为 C++11 中的枚举类使用固定宽度的整数

我应该在什么情况下使用它:enumclassMyFixedType:uint32_t//oranyotherfixedwidthintegertype{ID1,ID2,ID3};关于这个:enumclassMyType{ID1,ID2,ID3};? 最佳答案 一些可能有用的场景超出了我的脑海:空间有限,您真的不需要标准的int大小的枚举。如果您使用的系统中整数以64位格式存储,并且您只有少于255个不同的枚举值,则您可能需要指定您希望/需要每个枚举元素的位数更少。机器之间的高效通信。假设您知道在两台机器上使用相同的字节顺序,但整数具

c++ - 如何获取C++11参数包中的类型?

我不确定我是否以最有效的方式对问题进行了措辞,但我现在才刚刚开始使用C++11,并且无法将其新功能应用于手头的问题。我有以下名义功能:templatestd::vectorfoo()我想要foo()返回vector包含type_index参数包中每种类型的值Args.例如,foo,double>()会返回vector包含{type_index(typeid(int)),type_index(typeid(vector)),type_index(typeid(double))}.理论上,我想遍历包中的类型并对它们中的每一个调用上述转换(即给定类型T,返回type_index(typeid

c++ - 为枚举索引数组重载 std::get

我发现拥有一个基本上像std::array但由一些枚举的值索引的类相当方便。我想不难想象如何实现它,假设它有一个像这样的签名:classenum_array另一方面,在尝试实现所有标准的std::array相关函数时,我注意到为此类编写重载的std::get函数模板没那么简单。首先,我认为这个std::get具有上述枚举的值作为模板参数是很自然的,因此出现了大多数问题:1)如果我想在类外定义这样的函数,我必须做类似的事情:namespacestd{templateEnumT&get(enum_array&val)但问题是在指定第一个模板参数时EnumT仍然是未知的,所以这个模板实际上是

蓝桥杯嵌入式第11届真题(完成) STM32G431

蓝桥杯嵌入式第11届真题(完成)STM32G431题目代码程序和之前的大同小异,不过多解释main.c/*USERCODEBEGINHeader*//*********************************************************************************@file:main.c*@brief:Mainprogrambody*******************************************************************************@attention**©Copyright(c)

c++ - std::string 什么时候重新分配内存?

当使用std::string对象并且我想向它添加字符时,它会预先分配一些内存,还是只分配我需要的内存?准确地说:std::strings;s.reserve(20);charc='a';s="";for(inti=0;i在上面的例子中,我预留了一定量的内存。现在当我清除字符串时,是否会导致保留的内存被丢弃?在循环中它会填满预留内存然后每次重新分配额外的5个字符吗? 最佳答案 没有要求std::string在您分配一个空字符串给它时释放分配的内存。当您为其分配一个短字符串时也不会。唯一的要求是,当它分配内存以容纳更大的字符串时,分配必

c++ - 在这种情况下, std::stack::push() 和 std::stack::emplace() 之间有区别吗?

看这段代码:structDummy{intbla;intblabla;charcharacter;Dummy(intb,intbb,charc):bla(b),blabla(bb),character(c){}};std::stacks;Dummydummy;s.push(dummy);//(1)s.emplace(dummy);//(2)我看不出(1)和(2)之间的区别。我知道emplace()在为要添加的对象的构造函数提供参数时很有用,例如:s.emplace(1,2,'c');但我不知道我描述的情况有什么区别,因为push()和emplace()都应该引用本地dummy对象并使用

c++ - 使用 std::random_device 和 pRNG 有什么区别,例如std::mt19937 和没有?

在C++11中,可以使用std::random_device生成数字,有或没有像mt19937这样的伪随机数生成器。在此示例代码中使用它会有什么不同:#include#includeintmain(){std::random_devicerd;std::mt19937mt(rd());std::uniform_real_distributiondist(1,10);for(inti=0;i 最佳答案 std::random_device应该为您提供mt19937等引擎的种子。所产生的连续数字的质量是完全不确定的,并且可能很容易不足以

c++ - 获取可变数量的参数并将它们放入 std::vector

我正在创建一个类——我们称它为Container——它基本上只包含一个std::vector和一些决定vector值如何的特殊逻辑采摘。我想添加一种通过一次调用向我的类添加多个值的方法。这是我添加一项的方法:voidLoopGenerator::add(RandomStripe&stripe){stripes.push_back(newSingleStripe(stripe));}我想要一个类似的方法,可以这样调用:LoopGeneratorgen=LoopGenerator();gen.add(RandomStripe(),RandomStripe(),RandomStripe().

c++ - 通过迭代器从 std::vector 中移除

为了从std::vector中移除一个迭代器,我可以做这两件事:std::vector&vec=myNumbers;//useshorternamevec.erase(std::remove(vec.begin(),vec.end(),number_in),vec.end());或者我可以这样做:autoit=find(vec.begin(),vec.end(),number_in);vec.erase(it);我猜第二种更直观,但哪个更快?编辑:vector中的元素是唯一的,我们不必担心一次删除多个元素。 最佳答案 第一个保证正确

c++ - 读取大文件时杀死 std::thread

我有一个std::thread函数调用fopen将一个大文件加载到一个数组中:voidloadfile(char*fname,char*fbuffer,longfsize){FILE*fp=fopen(fname,"rb");fread(fbuffer,1,fsize,fp);flose(fp);}调用者:std::threadloader(loadfile,fname,fbuffer,fsize);loader.detach();在某些时候,我的程序中的某些东西想要停止读取该文件并请求另一个文件。问题是当我删除fbuffer指针时,loader线程仍在运行,我得到了一个引发异常的竞争