我有几个关于参考变量的问题
I have a few questions about reference variable
typedef struct
{
int xpos = 0;
int ypos = 0;
}Point;
Point& PA(const Point &p1, const Point &p2)
{
Point *pptr = new Point;
pptr->xpos = p1.xpos + p2.xpos;
pptr->ypos = p1.ypos + p2.ypos;
return *pptr;
}
int main()
{
Point *pptr1 = new Point;
pptr1->xpos = 3;
pptr1->ypos = 20;
Point *pptr2 = new Point;
pptr2->xpos = 70;
pptr2->ypos = 7;
Point &ref = PA(*pptr1, *pptr2);
delete pptr1;
delete pptr2;
delete &ref;
return 0;
}
- 首先,我有一个问题,关于如何声明一个变量以将局部变量返回为引用类型。函数PA的返回类型是Point&正如你所看到的。然而,在函数的定义内部,它返回一个用动态分配声明的结构变量。这怎么可能
注意:不要在C++中使用typedef struct
,这是C习语,在C++中只会造成伤害。只需定义它,并可能添加一些因素:
struct Point
{
int xpos = 0;
int ypos = 0;
Point() = default;
Point( int x, int y ) : xpos( x ), ypos( y ) {}
};
首先,我有一个关于如何声明一个变量以将局部变量返回为引用类型的问题。
不能返回对局部变量的引用,因为这会导致悬空引用。尽管可以使用静态变量使其"工作",但这不是一个好的解决方案,您最好将此函数更改为按值返回。
然而,在函数的定义中,它返回一个用动态分配声明的结构变量。这怎么可能?
您通过取消引用来返回对动态分配对象的引用,这最终导致了删除引用地址的丑陋破解。你永远不应该那样做。如果函数假设返回动态分配的对象,请使用智能指针来清楚地显示您的意图。在这种情况下,这是不必要的,您应该只返回值对象:
Point PA(const Point &p1, const Point &p2)
{
Point p;
p.xpos = p1.xpos + p2.xpos;
p.ypos = p1.ypos + p2.ypos;
return p;
}
或者,如果你如上所述添加了actor,它的缩写为:
Point PA(const Point &p1, const Point &p2)
{
return Point( p1.xpos + p2.xpos, p1.ypos + p2.ypos );
}
并且main也变得更短:
int main()
{
Point p1( 3, 20 );
Point p2( 70, 7 );
Point r = PA(p1, p2);
std::cout << r.posx << "," << r.posy << std::endl;
return 0;
}
函数PA()
不返回任何对象,而是对一个对象(Point
(的引用,该对象已初始化为引用地址为pptr
的对象。
引用就像指针一样,但可以像使用实物一样使用(=对象(。与指针不同,引用不能被分配(为了引用另一个对象(,而是在其整个生命周期中绑定到同一个对象(分配给引用意味着分配给被引用的对象(。这意味着引用必须初始化,但也意味着引用可能是悬空的(例如,在代码中,ref
在delete &ref;
之后悬空(。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++理解计算字符变量的问题
- 在通知提升间处理条件变量时未按住锁会导致问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 将十六进制值设置为用于填充的字符变量时出现问题
- 初学者问题:如何访问此变量?
- 关于仅正确使用二传手和变量的问题
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- C++ 多线程中的锁和条件变量问题
- C++grpc的一些变量问题
- 我如何加载多个脚本而没有变量问题
- 未初始化的变量问题C++
- C++和引脚工具 - IF语句非常奇怪的双变量问题
- 如何通过引用捕获异常来解决局部变量问题
- sscanf写入变量问题
- 影子变量问题Qt
- C++ 中的局部变量问题
- 跨平台条件变量问题
- Makefile变量问题,make想要创建"*.o"而不是foo.o bar.o等
- c++变量问题