gpt4 book ai didi

c++ - 为什么返回堆栈对象有效?

转载 作者:行者123 更新时间:2023-11-27 23:04:07 25 4
gpt4 key购买 nike

堆栈对象的黄金法则是,堆栈对象一旦离开函数范围就会被删除。但实际上像这样的代码是可行的:

Vec3d Vec3d::operator+(Vec3d const& vec) const{
return Vec3d((x + vec.getX()), (y + vec.getY()), (z + vec.getZ()));
}

将在调用时创建的对象实际上在堆栈中并被返回,并且它可以在调用运算符的函数中使用。所以实际上当我尝试使用我的 Vec3d 时它应该抛出一个异常,因为它显然超出了重载运算符方法的范围。为什么它有效?它可能是一种内联代码,其中分配被编译器移动到函数调用而不是函数本身内部。或者它是一个复制构造函数,其中堆栈对象被复制为一个新的堆栈对象来代替函数调用...

我是 c++ 的新手,正在尝试了解 c++ 的机制是如何工作的,但是当您开始使用 java 时,这有点令人困惑 :D

提前致谢

最佳答案

您正在返回在堆栈上创建的对象的拷贝,该对象是使用复制构造函数构造的。您没有返回原始对象。

另一方面,如果您试图返回一个指向在堆栈上创建的对象的指针,那将是非常糟糕的。

关于c++ - 为什么返回堆栈对象有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24747269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com