gpt4 book ai didi

c++ - 在 C++ 中获取类成员的大小

转载 作者:行者123 更新时间:2023-12-02 17:51:34 26 4
gpt4 key购买 nike

我构建了一个名为 IntSet 的类。我的问题是,我不想存储另一个元素,即我想在 elem 数组中引入的最大元素数量。因此,在 add 方法或任何其他方法中,我想使用此操作找出在 IntSet (int dim_max) 构造函数中分配的最大大小:

int n = sizeof(elem) / sizeof(*elem); //or sizeof(elem) / sizeof(int);
cout << "N is = " << n;

但是,这不起作用,每次n为1时,即使我分配elem = new int[dim_max];,其中dim_max是我从键盘读取的变量,它比1大得多.这是代码:

 #include <iostream>
using namespace std;

class IntSet{
int *elem;
int dim;

public:

IntSet (int dim_max) {
dim = -1;
elem = new int[dim_max];
}

void add(int new_el) {
int n = sizeof(elem) / sizeof(int);
cout << "N is =" << n;
for(int i = 0; i < n; i++) {
if(elem[i] == new_el) {
cout << "It's already there !";
return;
}
}
dim++;
if(dim == n) {
elem = (int*)realloc(elem, sizeof(int) * (n + 1));
global_var++;
}
elem[dim] = new_el;
}
};

最佳答案

sizeof 运算符在编译时作用于类型。由于 elemint*,因此 sizeof(elem)sizeof(int*) 相同。而 *elem 是一个 int,因此 sizeof(*elem)sizeof(int)

所以最后,无论您在 elem 中输入什么内容,您的公式都相当于 sizeof(int*)/sizeof(int)。没有标准方法可以找出为指针分配的数组元素的数量。

出于您的目的,您要么必须跟踪类中的 dim_max,或者更好的是,用更好的 vector 替换指针和数组的使用。 .

vector 提供 size()函数,并允许使用 push_back() 在末尾轻松动态添加新元素。也许您也会感兴趣:还有一个 set标准库中的容器。

关于c++ - 在 C++ 中获取类成员的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58498027/

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