c++ - 数组声明和大小初始化(C++)

标签 c++ arrays header size declaration

我不太确定如何提出这个问题,所以我将从一些示例代码开始:

//header file
class A
{
public:
    A();
private:
    int x;
    std::string arr[x];
}

//cpp file

class A
{
public:
    A()
    {
     /*code to get the value of x from a cmd call*/
    }
}

此代码有效吗?更具体地说,我是否可以让我的头文件中的字符串数组的大小为 x,即使在创建 A 对象之前没有专门为 x 指定值?

如果这不起作用,我唯一的选择是使用动态分配的数组吗?

最佳答案

代码无效。您应该改用 vector 。

class A
{
public:
    A();
private:
    int x;
    std::vector<std::string> arr;
};

A::A () : x(command_gets_x()), arr(x) {}

由于 arr 是由 x 的值初始化的,因此构造函数仅在 xarr 之前工作在 A 中(因为它在您的定义中)。但是,如果 x 的唯一目的是跟踪数组的大小,则没有必要,因为 vector 具有 size() 方法。

class A
{
public:
    A() : arr(command_gets_x()) {}
    int x () const { return arr.size(); }
    //...
private:
    std::vector<std::string> arr;
};

关于c++ - 数组声明和大小初始化(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11750347/

相关文章:

c++ - 双端队列内存释放

cocoa - cocoa 中的按钮数组?

python - Cython中类似于Fortran的数组切片

css - 标题 div 保持在顶部,垂直滚动的 div 在下面,滚动条仅附加到该 div

c++ - base::Thread 的源代码在哪里

c++ - 多次分配内存是否会一次性花费更多时间?

java - 如何在java中找到行尾并执行两个整数数组的加法?

android - 在android应用程序中加载非缓存的webview

iphone - 从静态 TableView 中获取标题标题

c++ - 在对象构造中使用 "="的影响