taking address of temporary错误
2014-12-06 21:31
393 查看
前些天将一个项目从VS2013移植到Qt上,遇到了这样一个问题:
从这个问题中我们可以看出使用非const引用引用返回的临时变量地址是确实不被允许的(如果使用const引用,可以延长变量生命周期到与引用同长),起码也会抛出一个警告
那这段代码为啥能在VS上通过编译呢?百度得知,这是VS2013的非标准扩展(默认打开,可关闭),自动在多种情况下扩展了被引用对象的生命周期
Dispatch->XCDispatchMessage(&linev()); //error:taking address of temporary这段代码从VS2013通过了编译,但是到Qt上却出现了错误,于是上网百度,有一个人在编译OpenCV时也遇到了一样的问题:
cv::Mat centers; int attempts = 1; int flags = cv::KMEANS_PP_CENTERS; cv::kmeans(sample_feature, k, tmp, cv::TermCriteria(), attempts, flags, ¢ers); MyFunction myobject; myobject.set(&CvMat(centers));//error:taking address of temporary [-fpermissive]很明显,这都是因为引用返回的临时变量地址而引起的编译性错误。联想到之前的讨论,我将代码做了修改:
lin *plin=&linev(); Dispatch->XCDispatchMessage(plin);结果还是一样的错误,思考了很久,我想到了这么办:
lin lin=linev(); lin *plin=&lin; Dispatch->XCDispatchMessage(plin);最后成功通过了编译,无警告。
从这个问题中我们可以看出使用非const引用引用返回的临时变量地址是确实不被允许的(如果使用const引用,可以延长变量生命周期到与引用同长),起码也会抛出一个警告
那这段代码为啥能在VS上通过编译呢?百度得知,这是VS2013的非标准扩展(默认打开,可关闭),自动在多种情况下扩展了被引用对象的生命周期
相关文章推荐
- C++编译出现的警告----------taking address of temporary
- error: taking address of temporary
- opencv-jni -调试出错taking address of temporary [-fpermissive]
- opencv-jni -调试出错taking address of temporary [-fpermissive]
- returning address of local variable or temporary
- warning C4172: returning address of local variable or temporary
- 解决VMware虚拟机“Taking ownership of this virtual machine failed”的错误
- D:\vcfile\4.c(6) : warning C4172: returning address of local variable or temporary
- dlitech's m3 project url, of course it's a temporary address
- oracle 错误 access violation at address in module 'ora805.dll'. write of address
- 错误分析:Internal Query Processor Error: The query processor ran out of stack space during query optimization.
- 错误:org.apache.jasper.JasperException: Exception creating bean of class app.LogonForm: {1}
- How to quikly find AS number of a IP address
- 事件与事件处理过程的动态绑定 addhandler addressof
- Rails之父DHH在RailsConf2006上的Keynote Address TRANSCRIPT Part 2 of 8
- “Object reference not set to an instance of an object. ”错误
- 解决文件无法上传的问题,错误信息:System.IO.DirectoryNotFoundException: Could not find a part of the path.
- 编译结束时the .plg file has been modified outside of the source editor错误消息提示
- CS0016: 未能写入输出文件“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\webapp\2adfa36a\1a90a869\8_prkz0n.dll" 错误的解决办法。
- ACE Link gettimeofday的错误