0

这是一个需要 std::initializer_list 的构造函数,我想将它分配给一个向量。我是否需要使用 for 循环将 std::initializer_list 中的每个项目一一分配给向量?

Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set)
{
  this->motor_vector = port_set;
}
4

2 回答 2

4

我需要使用 for 循环 [...] 吗?

不,为了初始化Motor_Group::motor_vector类型std::vector<pros::Motor>,你应该使用构造函数的成员初始化列表Motor::Group

Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set) :
    motor_vector{port_set}
{}

初始化应该优先于构造函数主体中的赋值,因为它首先会导致不必要地调用数据成员的默认构造函数。这不一定是可衡量的性能损失(但在极少数情况下可能是这样),而是需要更多思考而不是简单初始化的控制流。

于 2019-07-22T08:50:27.147 回答
3

尝试

this->motor_vector = std::vector{port_set}; 

或者更好,使用初始化列表:

Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set)
    : motor_vector{port_set} {}
于 2019-07-22T08:49:26.410 回答