草庐IT

C++ 常量临时生命周期

你能告诉我这样的代码是否正确(根据标准):structarray{intdata[4];operatorconstint*()const{returndata;}};voidfunction(constint*){...}function(array());//isarraydatavalidinsidefunction?谢谢 最佳答案 是的。临时对象在创建它的完整表达式结束之前有效;也就是说,直到函数调用返回之后。我手头没有标准拷贝,所以无法提供准确的引用资料;但它在C++0xfinaldraft的12.2中.

c++ - 从类型 'int&' 的临时类型 'int' 的非常量引用的无效初始化

#includeusingnamespacestd;intfun(int&x){returnx;}intmain(){cout任何人都可以解释错误的原因吗?谢谢 最佳答案 10是一个常量,所以您不能传递对它的引用,只是因为更改常量的整个概念很奇怪。引入引用是为了解决C(和更早的C++)中的一个棘手问题,事实上一切都是按值传递的,如果你想将更改反射(reflect)回调用者,你必须传入一个指针并在函数中取消引用该指针以获取实际变量(用于读取和写入它)。在下一个ISOC标准中,这将是非常重要的好东西。虽然必须使用指针可能会让我们中的一些

c++ - 获取临时地址 - 需要解决方法

我正面临要修复的GCC警告。基本上我将一个指向局部变量的指针传递给一个方法,在我的例子中这完全没问题。我理解为什么编译器告诉我这是一个潜在的问题,但在我的情况下这没问题。如何在本地空间解决这个问题?编译的时候传入-fpermissive会让我以后找不到问题。我想解决这个特定问题,或解决它。代码在这里可用:#includeclassInteger{public:Integer(inti){v=i;};intvalue(){returnv;};private:intv;};intfoo(Integer*i);intmain(){foo(&Integer(12));}intfoo(Integ

c++ - const 引用临时异常

我们都知道像这样的事情在c++中是有效的:constT&x=T();同时:T&x=T();不是。在arecentquestion谈话导致这条规则。OP发布了一些明显让人联想到UB的代码。但我希望它的修改版本可以工作(这是修改版本):#includeusingnamespacestd;classA{public:A(intk){_k=k;};intget()const{return_k;};int_k;};classB{public:B(constA&a):_a(a){}voidb(){coutb();}这在一些机器上打印垃圾,在其他机器上打印10...对我来说听起来像UB:-)。但后来

c++ - 如何检测对临时对象成员的引用

我的同事最近在Windows中编译了我们的程序,发现了一个错误:std::stringa="hello";std::stringb="world";constchar*p=(a+b).c_str();printf("%s\n",p);出于某种原因,它没有在我们的Linux可执行文件中崩溃。我们的编译器都没有给出任何类型的警告,所以我们现在担心代码中可能存在这个错误。虽然我们可以grep查找c_str()的出现并进行目视检查,但也有可能有人还做了以下操作:structI{intnum;I(){num=0;}};structX{I*m;X(){m=newI;}~X(){deletem;}I

c++ - 临时延长生命周期

标准第12.2.5节说:Atemporaryboundtoareferenceparameterinafunctioncall(5.2.2)persistsuntilthecompletionofthefullexpressioncontainingthecall.Atemporaryboundtothereturnedvalueinafunctionreturnstatement(6.6.3)persistsuntilthefunctionexits.Inallthesecases,thetemporariescreatedduringtheevaluationoftheexpres

填充一个带有小部件的临时桌子,正在进行中

我正在尝试使用此代码动态创建一组按钮:DEFINEVARtemp-handASWIDGET-HANDLE.DEFINEINPUTPARAMETERipcASCHARACTERNO-UNDO.&global-defineXVALUE(v+ipc)CREATEBUTTONtemp-handASSIGNFRAME=FRAMEbtn-frame:HANDLEROW=vdeInicioCOLUMN=10WIDTH=19LABEL=ipcSENSITIVE=TRUEVISIBLE=TRUETRIGGERS:ONCHOOSEPERSISTENTRUNbtn-messINTHIS-PROCEDURE.ENDT

c++ - 使用 std::move 传入一个临时 lambda,或者向 "pull"输出一个临时参数,有什么区别?

我有以下(设计的)代码,其中我有一个带有单个打印函数的打印机类和一个处理字符串然后调用打印函数回调函数的工作类:#include#includeusingcallback_fn=std::function;classprinter{public:boolprint(std::stringdata){std::cout注意:我调用了两次std::move()...现在这有效(令我惊讶),但我两次调用都只是为了展示我是什么试。我的问题是:我是否应该在set_callback()函数中使用std::move()来“提取”温度,如果我使用它,是否真的有一个拷贝还是std::move()意味着它

c++ - 在 C++ 中按值传递临时结构的简单方法?

假设我想将一个临时对象传递给一个函数。有没有一种方法可以用1行代码而不是2行代码,使用一个结构?有了类,我可以做:class_func(TestClass(5,7));给出:classTestClass{private:inta;shortb;public:TestClass(inta_a,shorta_b):a(a_a),b(a_b){}intA()const{returna;}shortB()const{returnb;}};voidclass_func(constTestClass&a_class){printf("%d%d\n",a_class.A(),a_class.B())

c++ - 绑定(bind)到函数参数的引用会延长该临时对象的生命周期吗?

我有这段代码(简化版):constint&function(constint¶m){returnparam;}constint&reference=function(10);//usereference我不太确定C++03标准$12.2/5措辞的程度Thetemporarytowhichthereferenceisboundorthetemporarythatisthecompleteobjecttoasubobjectofwhichthetemporaryisboundpersistsforthelifetimeofthereference...在这里适用。上面代码中的ref