草庐IT

function_char-length

全部标签

c++ - 如何使用函数签名的 typedef 作为 std::function 的类型参数?

当用作模板类型参数时,函数的typedef和使用裸函数类型之间肯定有区别。即,考虑#includetypedefstd::functionTF1;typedefvoid(*FooFn)(int);typedefstd::functionTF2;intmain(){TF1tf1;TF2tf2;return0;}我可以创建TF1但不能创建TF2(错误:aggregate'TF2tf2'的类型不完整,无法定义)。(参见ideoneexample。)有没有办法使用函数(签名)的typedef作为模板类型参数;具体来说,作为std::function?的类型参数(没有C++11标记,因为我对bo

c++ - char[](c-string) 的初始化标准

考虑以下代码:intmain(){charhi[5]="Hi!";printf("%d",hi[4]);}将打印什么?更重要的是,在最新C++标准中,标准中是否提及将打印的内容?如果有提及,它在哪里?由于某种原因,很难找到关于此的最新信息,而且各种来源的信息相互矛盾。我试过en.cppreference.com和cplusplus.com,前者没有任何信息,后者声称值未确定。然而,usingnamespacestd;intmain(){charmySt[1000000]="Hi!";for(inti=0;i这在我的系统上只打印0、1和2,所以我希望“rest”被初始化为“\0”。另外据

C++ 自动类型转换为 std::string 和 char* 的区别

作为学习练习,我一直在研究C++中的自动类型转换是如何工作的。我知道通常应该避免自动类型转换,但我还是想通过了解它的工作原理来增加我对C++的了解。我已经创建了一个可以自动转换为std::string的StdStringConverter类,但是编译器(Debian上的g++4.3.4)似乎没有这样做将对象与真实的std::string进行比较时的转换(请忽略缺少按引用传递和不必要地创建临时对象的情况):#includeclassStdStringConverter{public:explicitStdStringConverter(std::stringname):m_name(na

c++ - 将 size_t 转换为 int 以声明 char 数组的大小

我正在尝试声明一个char数组的大小,我需要使用声明为size_t的变量的值来声明该大小。无论如何我可以将size_t变量转换为int以便我可以这样做吗? 最佳答案 size_t是一个整数类型,不需要转换。在C++中,如果您想拥有一个动态大小数组,您需要使用new来使用动态分配。也就是说,您不能使用:std::size_tsz=42;charcarray[sz];您需要改用以下内容:std::size_tsz=42;char*carray=newchar[sz];//...andlater,whenyouaredonewiththe

c++ - Boost::GIL 如何将图像保存为 JPEG 或 PNG 到 char*?

所以我看到了关于保存到文件中的示例。但我想知道是否可以将其保存到char*或字符串而不是文件中-也就是说将其保存在内存中? 最佳答案 似乎没有任何东西可以boostboost本身。所有I/O似乎都基于提供文件名。不过好像有个扩展名here称为io_new,它具有基于流的I/O。参见文档here举个例子(搜索“读写内存缓冲区”)。 关于c++-Boost::GIL如何将图像保存为JPEG或PNG到char*?,我们在StackOverflow上找到一个类似的问题:

c++ - 语法糖 : automatically creating simple function objects

我要实现一组类模板和两个特殊变量,_1和_2.他们应该使以下内容成为合法代码://Sortascendingstd::sort(a,a+5,_1>_2);//Outputtoastreamstd::for_each(a,a+5,std::cout(std::cout,""),_1+5);我想_1*5也应该产生一个一元函数,以及_1/5等。不允许提升不允许使用lambda现在我有非常对模板和模板元编程的经验很少,所以我什至不知道从哪里开始以及我的类模板的结构应该是什么样子。我特别困惑,因为我不知道在我的类模板中是否必须为所有这些编写实现operator=,operator>>,opera

c++ - 在设备上的线性内存中循环二维数组时将 float* 转换为 char*

在CUDA4.0编程指南的第21页有一个示例(下面给出)来说明循环遍历设备内存中二维float组的元素。2D的尺寸是width*height//Hostcodeintwidth=64,height=64;float*devPtr;size_tpitch;cudaMallocPitch(&devPtr,&pitch,width*sizeof(float),height);MyKernel>>(devPtr,pitch,width,height);//Devicecode__global__voidMyKernel(float*devPtr,size_tpitch,intwidth,int

c++函数参数char指针和字符串

voidcallme(stringa){cout为什么char*会被调用?为什么当我注释掉带有char*参数的函数时,会调用另一个函数? 最佳答案 那是因为"ASDADS"可以转换为char*。因此,编译器会为它可以匹配参数的第一个函数生成代码。如果您使用char*删除原型(prototype),编译器将查找接受参数的函数,该参数具有从char*到参数类型的隐式转换。以下面为例:classA{public:A(){}A(intx){}};//voidfoo(intx){}voidfoo(Ax){}intmain(intargc,ch

c++ - 警告 C4180 : qualifier applied to function type has no meaning; ignored

我已经设置了编译器/Za选项来禁用语言扩展,以便编译器严格使用标准ISOC++。这是我收到以下警告的示例接口(interface)类warningC4180:qualifierappliedtofunctiontypehasnomeaning;ignored这是关于函数返回类型中的const限定符,如果我删除const,警告就会消失,但我不想这样做,我想重新启用lanqage扩展。我的问题是:这个警告合理吗?如果不是,那么我将使用pragma禁用警告,但在此之前我想确保此警告是“误报”因为下面的类是正确的ANSIISOC++不是吗?所以警告应该被禁用?classIBet{public:

C++ : syntax for passing iterator to a function?

我正在制作一个类,它是一种容器,我想制作一个可以采用“第一个”和“最后一个”迭代器的构造函数,如std::vector和其他标准容器。正确的语法是什么?(我想要一个模板函数,它可以接受任何可用的第一个/最后一个迭代器类型(就像我认为的标准库)。非常感谢!举个例子,我想要这样的东西:templateMyClass(...first,...last)但是……是什么?非常感谢。关于第一个答案:我想要一个将迭代器作为参数的特定构造函数(因为我已经有了将值和指针作为参数的构造函数)编辑:这样可以吗?templateMyClass(std::iteratorfirst,std::iteratorl