gpt4 book ai didi

c++ - 运算符重载和堆与堆栈的混淆

转载 作者:行者123 更新时间:2023-11-27 22:35:21 25 4
gpt4 key购买 nike

我正在查看以下教程: http://www.videotutorialsrock.com/opengl_tutorial/animation/home.php

这个人有一个 vector 类:

class Vec3f {
private:
float v[3];
public:
Vec3f();
Vec3f(float x, float y, float z);

float &operator[](int index);
float operator[](int index) const;

Vec3f operator*(float scale) const;
Vec3f operator/(float scale) const;
Vec3f operator+(const Vec3f &other) const;
Vec3f operator-(const Vec3f &other) const;
Vec3f operator-() const;

const Vec3f &operator*=(float scale);
const Vec3f &operator/=(float scale);
const Vec3f &operator+=(const Vec3f &other);
const Vec3f &operator-=(const Vec3f &other);

float magnitude() const;
float magnitudeSquared() const;
Vec3f normalize() const;
float dot(const Vec3f &other) const;
Vec3f cross(const Vec3f &other) const;
};

使用示例定义:

Vec3f Vec3f::operator*(float scale) const {
return Vec3f(v[0] * scale, v[1] * scale, v[2] * scale);
}

我不明白为什么会这样。这不应该立即导致段错误吗?返回值在堆栈上,应该在所有这些函数终止时被删除。为什么它有效?我对堆栈与堆的理解不正确吗?

编辑:我的理解基于此: How to return a class object by reference in C++?

最佳答案

Vec3f Vec3f::operator*(float scale) const {
return Vec3f(v[0] * scale, v[1] * scale, v[2] * scale);
}

这使用按值返回,因此返回的是该行创建的类实例的,而不是实例本身。

这与return 1; 没有本质区别。返回的是,而不是包含该值的任何特定实例或类成员。与几乎所有其他事情一样,实现的责任是弄清楚如何完成代码所要求的——在这种情况下,确保存在某个实例以在适当的生命周期内保存返回值。

关于c++ - 运算符重载和堆与堆栈的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55053963/

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