C++ C++;初始化构造函数中的数组
cpp: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
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 );
}