首页 > 解决方案 > 返回的局部变量的地址-可以忽略警告而不会造成损害,但是正确的方法是什么?

问题描述

我有一堂课Particle

class Particle {
private:
    float x, y, z;
    // ...
public:
    // ...
    float* getPos() {
        float p[3] = {x, y, z};
        return p;
    }
    // ...
};

我会这样称呼这个方法:

Particle a = Particle();
// ...
float* pos = a.getPos();

pos[0]然后使用through引用位置元素pos[2]

g++ 会发出标题中所述的警告消息。但功能正是我想要的:返回一个数组。为什么存在警告,是否有“正确”的方法来做到这一点?

标签: c++classpointersscope

解决方案


您不能返回这样的 C 数组,std::array而是返回:

std::array<float, 3> getPos() {
    std::array<float, 3> p = {x, y, z};
    return p;
}

你需要包括在内<array>


推荐阅读