struct Test {
    int w, h;
    int * p;
};

int main(){
    Test t {
        10,
        20,
        new int[this->h*this->w]
    };
    return 0;
}

我只想在初始化中使用w和h,有什么办法吗?

最佳答案

首先-you should avoid calling new (and delete ) explicitly,在极少数情况下除外;这不是其中之一。使用std::unique_ptr来保存分配的内存(请参见下文)。

要回答您的问题:您不能将struct / class的成员用作该struct / class的构造函数的参数。从概念上讲,参数是在构造函数运行之前解析的。

但是,您可以编写一个命名构造函数惯用法:

struct Test {
    int w, h;
    std::unique_ptr<int[]> p;

static:
    Test make(int w, int h) {
        return Test{ w, h, std::make_unique<int[]>(w*h) };
    }
};

这会让你写:
auto my_test = Test::make(w, h);

另外,您可以直接实现只接受wh的构造函数:
struct Test {
    int w, h;
    std::unique_ptr<int[]> p;

    Test(int w_, int h_) : w(w_), h(_), p(std::make_unique<int[]>(w_*h_) { }
};

...但是您将需要为无参数构造函数和3参数构造函数(如果不是其他方法)编写一些额外的代码。

关于c++ - 如何在C++结构初始化中获取成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62189766/

10-13 07:01