草庐IT

c++ - 嵌套初始化列表的构造函数

是否可以有一个通用构造函数接受任何类型的初始化列表,即使其中有嵌套列表?假设您有一个类的以下部分模板特化,该类接受其构造函数嵌套的初始化列表:模板A类;templateclassClassA{typedefstd::initializer_listlist_type;typedefstd::initializer_listllist_type;typedefstd::initializer_listlllist_type;typedefstd::initializer_listinitializer_type;size_tn_[4]={0};double*data_;public:Cl

c++ - 依赖于模板参数的成员变量和构造函数

在C++11中,我希望在类中有一个成员变量,并且只有在选择默认模板值时才需要一个用于初始化的构造函数(当然,仅适用于支持的类型,如int)。实现此目标的推荐方法是什么(允许提升)?类似于:templatestructC{C(){}//onlyavailableif_x!=-1C(intx):x(x){}//onlyavailableif_x==-1//moremethodsthatarecommonforall_xandreferto_x/xprivate:intx;//onlyavailableif_x==-1//moremembersthatarecommonforall_x};或

c++ - lambda 函数的快速和通用使用

动机我创建了一个头文件,将Matlab的mex功能包装在c++11类中;特别是对于MxNxC图像。我创建的两个函数是forEach,它迭代图像中的每个像素,还有一个forKernel,它给定图像中的内核和像素,迭代该像素周围的内核,处理各种漂亮的样板索引数学.我们的想法是可以像这样对滑动窗口进行编程:image.forEach([](Image&image,size_trow,size_tcol){//krandlcspecifywhichpixelisthecenterofthekernelimage.forKernel(row,col,kernel,kr,kc,[](Image&i

c++ - 使用 size_t 索引以相反的顺序枚举数组

假设我们需要以相反的顺序打印大小为N的int数组://Wrong,iisunsignedandalways>=0:for(size_ti=N-1;i>=0;--i){cout=0;--i){cout0;--i){cout是否有更好的方法来使用size_t索引进行此类枚举并且无需在循环中进行额外操作?假设(size_t)0-1给出(size_t)(-1)还是未定义是否有效? 最佳答案 您可以将减量移动到条件“之后”。for(size_ti=N;i>0;){--i;cout它不像前向循环那么优雅,但它可以工作。我们在0处中断,所以i永远

c++ - 使用 vector<int>::size_type 和普通整数有什么区别?

我是c++STL语言的初学者。我想知道这两个代码之间的区别。我问过我的friend,但他说两者是一样的。任何人都可以解释这两个是否相同。并解释为什么这些不同#include#includeusingnamespacestd;intmain(){vectorstudent_marks(20);for(vector::size_typei=0;i>student_marks[i];}return0;}和#include#includeusingnamespacestd;intmain(){vectorstudent_marks(20);for(inti=0;i>student_marks[

C++ 允许我在运行时分配一个数组而不是给出一个错误

我读到数组大小需要在编译时知道。但是,当我这样做时,它编译并运行得很好,没有出现任何错误……这是怎么回事?#includeintmain(){intsize;std::cout>size;inta[size];return0;} 最佳答案 您没有将其编译为严格符合C++,而是usinganextensionborrowedfromC99.使用-Wall-Wextra-pedantic-std=c++14让编译器报错。请记住,符合标准的编译器只需要在遇到标准认为格式错误的构造时输出单个诊断。

c++ - 支持单个位偏移的类似“memcpy”的函数?

我正在考虑解决这个问题,但它看起来是一项艰巨的任务。如果我自己拿这个,我可能会用几种不同的方式编写它并选择最好的,所以我想我会问这个问题,看看是否有一个好的图书馆已经解决了这个问题,或者是否有人有想法/建议。voidOffsetMemCpy(u8*pDest,u8*pSrc,u8srcBitOffset,sizesize){//Orsomethingalongtheselines.srcBitOffsetis0-7,sothepSrcbuffer//needstobeuptoonebytelongerthanitwouldneedtobeinmemcpy.//Maybeexplicit

c++ - 无法将 'int (*)[size]' 转换为 'int**'

我有一个256x256的二维float组,我试图将其传递给函数,但g++给我错误消息:无法将'int(*)[256]'转换为'int**'。我该如何解决这个问题?voidhaar2D(int**imgArr);intimageArray[256][256];haar2D(imageArray);我曾尝试将函数参数更改为int[256][256]和int*[256]类型,但没有成功。 最佳答案 必须按照编译器的要求声明函数参数。所以声明它要么像voidhaar2D(intimgArr[256][256]);或voidhaar2D(in

c++ - 从 'size_t' 到 'rapidjson::SizeType' 的转换

我有这个C++示例代码:voidtest(){rapidjson::Documentdoc;doc.SetObject();conststd::stringsource="Thequickbrownfoxjumpsoverthelazydog";rapidjson::Valuesource_val;source_val.SetString(source.c_str(),source.length(),doc.GetAllocator());}在编译时,在x64平台上,我收到此警告:warningC4267:'argument':conversionfromsize_ttorapidjs

c++ - size_t 数据类型可以安全地用于 str.find() 吗?

我一直在查看字符串的find()函数的代码,它们将结果存储在数据类型为size_t的变量中。然而,据我所知,size_t是一个无符号整数,如果find()没有找到预期的字符串,它会返回-1。例如,如果我有strings="asdf";size_ti=s.find("g")cout它给我4294967295。但是,如果我用int数据类型替换size_t,它会给我-1。奇怪的是,当我像这样进行比较时strings="asdf";size_ti=s.find("g")if(i==-1){do_something;}无论i是size_t还是int都有效。那我用哪个?int还是size_t?