草庐IT

c++ - return 语句是否为按值返回的函数创建一个临时对象?

在学习C++11右值引用和移动语义时,我开始对函数究竟如何返回值来初始化变量感到困惑。看下面的例子:WidgetmakeWidget(){Widgetw;…returnw;}Widgetw1=makeWidget();这里我假设没有RVO(即编译不会省略复制/移动)。当执行返回语句returnw;时,执行函数:1)在众所周知的位置(调用者知道的某个固定寄存器或内存位置)复制初始化一个临时对象,其值成为函数的返回值?然后调用者获取这个对象来复制初始化w1?或者2)函数获取w1的调用者传递的内存位置,函数的自动变量w用于复制初始化w1?(这已经是某种RVO了吗?还是某种内联函数行为?或者它

c++ - 返回值的初始化应该忽略自动对象的常量性

坚持const正确性,您可能希望使您的本地对象类型为unique_ptrconst如下所示,而T这里是一些不重要的类型:unique_ptrfoo(){constunique_ptrp=make_unique(...);...usingp'spointee...returnp;}不幸的是它没有编译,因为返回值无法初始化,因为unique_ptr自p以来没有复制构造函数并且move构造函数不可行是常量。如果C++标准规定当return语句的“操作数”是一个自动对象时,那么它潜在的常量性将被忽略怎么办?返回值初始化后不能引用自动对象,因此它的常量性现在无关紧要。在其析构函数中,也可以修改c

c++ - return *this 在 C++ 中安全吗?

我想知道从函数返回*this是否安全。this问题显示了一些你可以做到的方法,我的问题是这个例子:structtest{stringt;stringb;public:test&A(stringtest){this->t=test;return*this;}test&B(stringtest){this->b=test;return*this;}};intmain(){autoa=test().A("a").B("b").A("newa");return0;}会不会有内存泄漏? 最佳答案 isreturn*thissafeinc++基

c++ - 如何打印 void 指针指向的变量

我希望函数根据不同的参数值返回不同的类型,但是如何打印void指针指向的变量在main()?中#include#includeusingnamespacestd;void*func(inta){if(a==1){intparam=5;return¶m;}elseif(a==2){doubleparam=5.5;return¶m;}elseif(a==3){stringparam="hello";return¶m;}else{returnnullptr;}}intmain(){void*ptr=func(3);//cout 最佳答案

c++ - 将函数的返回值存储在元组中

考虑#includetemplateautoexecute(F...f){returnstd::make_tuple(f(0)...);}intfoo(int){return5;}intbar(int){return3;}intmain(){autotuple=execute(foo,bar);}有什么好的解决方法可以让bar返回void?我试过这个,但它不会编译:#includestructVoid{};templateTcheck(Tn){returnn;}Voidcheck(void){returnVoid{};}templateautoexecute(F...f){return

c++ - 如何使用 range-v3 库从 std::vector 获取列 View 和行 View ?

将7x5矩阵展平为std::vector,我想使用EricNiebler的range-v3库查看列和行。到目前为止,我设法(有改进的余地)获得单行、单列和连接行的View。参见:https://wandbox.org/permlink/8o4RgSucF3zSNuPNstd::vectornumbers={00,01,02,03,04,10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44,50,51,52,53,54,60,61,62,63,64,};constsize_tn=5;//numberofcolumns//R

c++ - 我的程序跳过返回语句

我的程序有这个功能:vectorLevel::getItemsAt(constPoint&pt){vectorvect(items.size());//copyallitemsatpt'spositiontovectremove_copy_if(items.begin(),items.end(),vect.begin(),boost::bind(matchesPosition,_1,pt));//updateLevelMapandreturnmap.setHasItem(pt,false);returnvect;}编译正常(我使用的是g++,我的gcc版本是4:4.4.1-1ubunt

c++ - 确定一个点是否在多面体内部

我正在尝试确定特定点是否位于多面体内部。在我当前的实现中,我正在研究的方法是寻找多面体的面数组(在本例中为三角形,但稍后可能是其他多边形)。我一直在尝试根据此处找到的信息进行工作:http://softsurfer.com/Archive/algorithm_0111/algorithm_0111.htm下面,您将看到我的“内部”方法。我知道nrml/normal有点奇怪……这是旧代码的结果。当我运行它时,无论我给它什么输入,它似乎总是返回true。(这已解决,请在下面查看我的回答——这段代码现在可以使用了)。boolContainer::inside(Point*point,floa

c++ - 在没有 typedef 的情况下在 C++ 中返回函数指针时出错

我试图在不使用typedef的情况下返回指向函数的指针,但编译器(gcc)发出了一个奇怪的错误,就好像我无法进行那种设置一样。备注:使用typedef代码有效。代码:voidcatch_and_return(void(*pf)(char*,char*,int&),char*name_one,char*name_two,int&number)(char*,char*,int&){pf(name_one,name_two,number);returnpf;}错误:'catch_and_return'声明为返回函数的函数你能给我解释一下为什么编译器不允许我这样做吗?谢谢!

C++ 计数函数

以下返回数字7。我的问题是我不确定为什么返回的数字是7。我尝试在Debug模式下运行以分解它但是不幸的是,这没有帮助。#include#include#includeusingnamespacestd;booleven_first(intx,inty){if((x%2==0)&&(y%2!=0))returntrue;if((x%2!=0)&&(y%2==0))returnfalse;returnxmy_list={0,1,2,3,4,5,6,7,8,9};intcount=count_if(my_list.begin(),my_list.end(),BeforeValue(5));c