c++ - 在 C++ 类中初始化数组和可修改的左值问题

标签 c++ arrays lvalue

我有一个基本的 C++ 类。标题如下所示:

#pragma once
class DataContainer
{
public:
    DataContainer(void);
   ~DataContainer(void);
    int* getAgeGroup(void);
    int _ageGroupArray[5];
private:

     int _ageIndex;

};

现在在类的 cpp 文件中,我想在类构造函数中使用默认值初始化 _ageGroupArray[5],如下所示:

#include "DataContainer.h"


DataContainer::DataContainer(void)
{

_ageGroupArray={20,32,56,43,72};

_ageIndex=10;
}

int* DataContainer::getAgeGroup(void){
return _ageGroupArray;
}
DataContainer::~DataContainer(void)
{
}

这样做我在 _ageGroupArray 行上得到“表达式必须是一个可修改的左值”。那么在构造函数中初始化数组对象是完全不可能的吗?我找到的唯一解决方案是在范围标识符之外定义数组。非常感谢对此的任何澄清。

最佳答案

在当前标准中,正如您已经注意到的,您不能使用初始化列表语法在构造函数中初始化成员数组。有一些变通办法,但没有一个真的很漂亮:

// define as a (private) static const in the class
const int DataContainer::_age_array_size = 5;

DataContainer::DataContainer() : _ageIndex(10) {
   int tmp[_age_array_size] = {20,32,56,43,72};
   std::copy( tmp, tmp+_age_array_size, _ageGroupArray ); 
}

如果数组中的值始终相同(对于类中的所有对象),那么您可以创建它的单个静态拷贝:

class DataContainer {
   static const int _ageGroupArraySize = 5;
   static const int _ageGroupArray[ _ageGroupArraySize ];
// ...
};
// Inside the cpp file:
const int DataContainer::_ageGroupArray[_ageGroupArraySize] = {20,32,56,43,72};

关于c++ - 在 C++ 类中初始化数组和可修改的左值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647038/

相关文章:

java - 如何找到字符串中最长的偶数单词

javascript - 如何仅返回数组中匹配/过滤的字符串?

用于验证相等运算符的 C++ 测试随着时间的推移与结构保持一致

c++ - 在哪里可以看到发布者发送的输出数据?

c++ - 注意 : 'std::thread' is defined in header '<thread>' ; did you forget to '#include <thread>' ?

c++ - string 和 int 对象或左值/右值的内存位置

c++ - 为什么 int 不能用作返回类型的左值,而用户定义的类可以?

c++ - clang++ 和 u16string

javascript - 使用自身重新定义数组

c++ - 合格的 id,它们是左值还是纯右值?