在初始值设定项列表中采用多个参数的成员变量

member variable taking multiple arguments in an initializer list

当初始化列表中的成员变量接受多个参数时,它是如何工作的?如果我的理解是正确的,这样的变量只需要一个参数...

我遇到这个问题的实际代码如下所示,你可以发现成员group_trajectory有三个参数。

ChompOptimizer::ChompOptimizer(ChompTrajectory* trajectory, const planning_scene::PlanningSceneConstPtr& planning_scene,
                               const std::string& planning_group, const ChompParameters* parameters,
                               const moveit::core::RobotState& start_state)
  : full_trajectory_(trajectory)
  , robot_model_(planning_scene->getRobotModel())
  , planning_group_(planning_group)
  , parameters_(parameters)
  , group_trajectory_(*full_trajectory_, planning_group_, DIFF_RULE_LENGTH)
  , planning_scene_(planning_scene)
  , state_(start_state)
  , start_state_(start_state)
  , initialized_(false)
{

If my understanding is correct, such a variable takes only one argument...

这是不正确的。初始化数据成员遵循数据成员类型产生的规则。如果一个数据成员的构造函数接受一个参数,它必须像那样被初始化。如果需要三个,您必须提供三个。您显示的示例代码可能会产生误导,因为所有其他构造函数只需要一个参数 - 但这是巧合(或良好做法,考虑到长参数列表是一个缺陷)。示例:

struct A {
   A(int) {} // takes one argument
   A(int, double) {} // overload with two arguments
};

struct B {
   B(int, int, int) {} // takes three argument
};

struct Test {
   Test() : 
      a(42), b(42, 43, 44) {}

   A a;
   B b;
};

在此示例中,a(42) 也可以是 a(42, 3.14),因为这样的构造函数也可用。只需传递类型所需的内容即可实例化。