C++ C++;初始化构造函数中的数组

C++ C++;初始化构造函数中的数组,c++,C++,cpp: Person::Person(int _id[9], string name, int age) :_age(age), _name(name){}; A.h: private: int _id[9]; string _name; int _age; 如何使用与年龄和姓名相同的方法初始化“id”字段?class Person class Person { typedef std::array<int, 9> ids_t; Person(ids_t, s

cpp:

 Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
A.h:

private:
int _id[9];
string _name;
int _age;
如何使用与年龄和姓名相同的方法初始化“id”字段?

class Person
class Person
{
    typedef std::array<int, 9> ids_t;
    Person(ids_t, string name, int age);

private:
    ids_t _id;
    string _name;
    int _age;
};

Person::Person(ids_t id, string name, int age) : _id(id),  _age(age), _name(name){}
{ typedef std::数组id\u t; 人员(ID\u t、字符串名称、整数); 私人: id\u t\u id; 字符串\u名称; 国际年龄; }; Person::Person(id\t id,字符串名,int-age):\u-id(id),\u-age(age),\u-name(name){
由于不能分配C样式数组,甚至不能用另一个数组初始化,因此可以使用C++样式数组(可以分配和复制初始化)简化任务:


但请注意,传递C样式数组是不好的,因为编译器将所有C样式数组参数视为指向数组第一个元素的指针。因此,
id
参数的类型实际上是
int*
,因此
Person
构造函数的调用者可以(使用隐式)传递任意大小的数组、指向单个
int
的指针,甚至是
nullptr
,如图所示。试图从这些无效参数中的任何一个复制9个元素将导致未定义的行为。

数组没有复制构造函数,而且该构造函数中的参数
\u id

 Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
隐式转换为指向作为参数传入的数组的第一个元素的指针。这实际上是构造函数的样子

 Person::Person(int *_id, string name, int age) :_age(age), _name(name){};
指针不保留它指向单个对象还是数组的第一个对象的信息

因此,如果参数为PAASE,则应在该参数后附加一个参数,该参数将指定参考底图数组的大小

比如说

Person::Person(int *_id, size_t id_num, string name, int age) 
    :_id {}, _age(age), _name(name)
{
    size_t size = id_num < 9 ? id_num : 9;
    std::copy( _id, _id + size, this->_id );
}
Person::Person(int*\u id,size\t id\u num,字符串名,int-age)
:_id{},_age(age),_name(name)
{
大小=id数量<9?id数量:9;
std::copy(_id,_id+大小,this->u id);
}

相关/重复:使用
std::vector
std::array
你能解释一下你在typedef行中做了什么吗?@XEvans他创建了一个类型别名:现在
ids\u t
是一个与
std::array
类型相同的类型名。
 Person::Person(int _id[9], string name, int age) :_age(age), _name(name){};
 Person::Person(int *_id, string name, int age) :_age(age), _name(name){};
Person::Person(int *_id, size_t id_num, string name, int age) 
    :_id {}, _age(age), _name(name)
{
    size_t size = id_num < 9 ? id_num : 9;
    std::copy( _id, _id + size, this->_id );
}