c++ - 在初始值设定项列表中采用多个参数的成员变量
问题描述
当初始化列表中的成员变量接受多个参数时,它是如何工作的?如果我的理解是正确的,这样的变量只需要一个参数......
我遇到此问题的实际代码如下所示,您可以发现该成员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)
{
解决方案
如果我的理解是正确的,这样的变量只需要一个参数......
这是不正确的。初始化数据成员遵循数据成员类型产生的规则。如果一个数据成员的构造函数接受一个参数,它必须像那样初始化。如果需要三个,您必须提供三个。您显示的示例代码可能会产生误导,因为所有其他构造函数只需要一个参数 - 但这是一个巧合(或良好做法,考虑到长参数列表存在缺陷)。例子:
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)
,因为这样的构造函数也是可用的。只需传递类型所需的内容即可进行实例化。
推荐阅读
- android - android导航组件的问题
- npm - 如何解决 install -g yarn 上的 npm 错误?
- javascript - 使用数组值作为常量
- mysql - 查找最频繁的值,然后从 MySQL 中的结果中计算另一个值
- javascript - 如何在与初始域不同的跨域上下文中使用 Web Worker 存储/读取数据?
- laravel - Laravel - 在控制器和电子邮件通知之间共享代码的最佳方式
- xamarin.forms - SetIcon 改变颜色
- html - 有没有办法过滤html页面中的数字?
- sql - 使用 SSMA 将 Access 数据库转换为 SQL 数据库后的结果数据库在哪里
- vb.net - 将行连接成一个字符串