我目前正在学习一门在线C++课程来填补我失业期间的时间,我有一个关于返回一个局部变量的地址的问题。 我意识到这不是一个推荐的做法,我正在寻找一个替代的解决方案来解决我正在尝试做的事情(返回数据以便复制到我的对象“CO”中,它是一个class Coord对象)。 顺便说一句。。。这个程序只要有结果就能发挥作用。 但它确实会得到警告C4172“Returning address of local variable or Temporary.。。”。 你能帮我一下吗?
下面是细节:在我的家庭作业程序中,我有一个函数,它返回局部变量Coord co的地址(Coord是我构造的带有两个int字段的类。。。显然。。。坐标)。 我的目标是使用Coord copy构造函数来使用该局部变量的地址复制数据。
//调用程序声明类Coord的对象co,如下所示
Coord co;
//调用程序可以在几个地方调用函数requestMove()。 //以下是其中一个呼叫
co = bd.requestMove(pHuman);
//requestMove()的签名是
const Coord& requestMove(Player&);
//被调用的函数requestMove()有一个本地Coord对象nodeAddress,它填充nodeAddress。 返回语句为:
return nodeAddress;
欢迎提出意见和建议。 非常感谢。
您可以返回对临时持续时间对象的引用,但这只是将自己射入脚中的方法之一。 C++不是保姆式语言,它允许这样做。
考虑:
const foo& bar() {
foo f;
return f;
}
这段代码将编译,但是会发生什么呢? 一开始您创建一个对象f
,但是当您从bar
返回时,对象f
超出范围并被销毁(这是RAII的本质)。 返回的引用将是对已不存在的对象的“野生引用”,试图访问该内存位置只是一种未定义的行为(这是一种很好的方式,表示程序将做什么--没人知道。出于各种意图和目的,它可能崩溃,它可能吃掉你的猫,或者给你煮咖啡)。
编译器只是警告您代码可能不会完成您期望它做的事情。