草庐IT

parameter-passing

全部标签

C++1y/C++14 : Converting static constexpr array to non-type template parameter pack?

假设我有一个静态存储持续时间的constexpr数组(已知范围):constexprTinput[]=/*...*/;我有一个需要打包的输出类模板:templatestructoutput_template;我想像这样实例化output_template:usingoutput=output_template;一种方法是:templatestructmake_output_template{templatestaticconstexproutput_templatef(std::index_sequence){return{};};usingtype=decltype(f(std::m

C++ 将内部结构作为参数传递

有一个包含内部结构TIn的结构TOut:templatestructTOut{structTIn{boolb;};TInin;Tt;};如何正确地将TIn作为形式参数传入某些方法?classTest{public:templatestaticvoidtest(constTOut::TIn&i){}//Error};intmain(){TOuto;Test::test(o.in);}程序编译出现如下错误:Error4errorC2998:'inttest':cannotbeatemplatedefinition 最佳答案 您需要使用t

具有非原始类型的 C++ 按值传递?

我一定对C++11有根本性的误解。我的教授告诉我,除非通过引用或指针,否则不可能将非基本类型传递给函数。然而,下面的代码工作得很好#includeusingnamespacestd;classMyClass{public:intfield1;};voidprint_string(strings){cout运行程序产生以下输出thisismystring9RUNSUCCESSFUL(totaltime:67ms)我在Win7上使用MinGW/g++为什么会这样?我认为非原始类型不能按值传递?! 最佳答案 非基本类型当然可以按值传递。(

c++ - auto 作为函数参数

在C++14中,这样的事情是合法的(对于lambdas):-autol=[](autox,autoy){returnx+y;};但是这样的事情仍然是不合法的:-autosum(autox,autoy){returnx+y;}我的好奇心是为什么没有将第二个添加到标准中(尽管它应该有望添加到C++17中)?第二个的优点和缺点是什么? 最佳答案 它没有被添加,因为添加是另一回事,而且时间不是无限的。我们不能指望一次性添加所有有用的增强功能,对吗?正如您所确定的,它将在C++17中。 关于c++

C++ Array of 120 ob​​jects with constructor + parameters, header- + sourcefile, no pointers please!

文件.h:externobjektsquares[120];文件.cpp:objektsquares[120]={objekt(objekt_size,objekt_size,-111,0)};我怎样才能一次初始化所有对象,所有对象都使用相同的参数? 最佳答案 不要使用原始数组(因为所有元素都将通过默认构造函数初始化)。使用例如一个std::vector:std::vectorsquares(120,objekt(objekt_size,objekt_size,-111,0)); 关于C

c++ - 如何修改按值传递的原始变量的内容?

有一个现有的API函数只允许插件(DLL)接收三个参数并执行一些操作:intProcessMe(intnCommand,unsignedintwParam,longlParam);现在,从主程序(exe),想传递两个变量给插件,并要求插件修改它们的内容,主程序将再次读取它们,以执行一些任务。我的问题是,根据上面的函数,我可以在不改变函数参数的情况下执行这个吗?例子:intProcessMe(intnCommand,unsignedintwParam,longlParam){//modifytheparameters//return0;}intmain(){BOOLbSave=TRUE;

c++ - 如何传递临时数组?

如何传递一个临时数组?我想做这样的事情:#includeintsum(intarr[]){intanswer=0;for(constauto&i:arr){answer+=i;}returnanswer;}intmain(){std::cout函数参数的大括号[]中是否需要正整数文字?如果我包含该文字,它是否会限制我只能传递给该大小的数组的数组?另外,如何通过右值引用或const引用传递数组元素?因为上面的示例没有编译,所以我假设函数的参数类型int&&[]或constint&[]将不起作用。 最佳答案 首先,您不能传递数组作为纯右

c++ - 函数参数中的 '&' 放在哪里?

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。谁能告诉我有什么区别voidfun(MyClass&mc);和voidfun(MyClass&mc);在C++中?

c++ - 如何引用与 C++ 中的局部变量同名的全局变量?

如果有一个全局变量并且函数有一个同名参数,并且期望的结果是局部变量和全局变量的总和,那么在这种特定情况下我们如何引用全局函数?我知道这样做不是个好主意。但只是出于好奇。intfoo=100;intbar(intfoo){intsum=foo+foo;//sumaddslocalvariableandaglobalvariablereturnsum;}intmain(){intresult=bar(12);return0;} 最佳答案 目前最好的选择是重命名函数参数,使其不与全局变量冲突,因此无需规避。假设重命名选项NotAccept

c++ - 只传递第二个模板参数的方法

所以我有一个模板函数,它有一个默认的第二个nd参数。可以推导出第一个st参数,所以类似:templatevoidfoo(constFparam)这在一般情况下工作正常,我会调用foo(bar).但是在我想指定第二个参数的情况下,我不能这样做:foo(bar),因为char被视为F.显然情况并非如此,因为bar不是char,所以F应该是可推导的。有没有一种方法可以让我在这里只传递一个适用于S的模板参数?,还有F被推导,依然默认S在一般情况下? 最佳答案 只需重新排序模板参数:templatevoidfoo(constFparam);模