请帮助理解C++:运算符
Please help understand the C++ : operator
请有人向我解释一下这个运算符在C++中对函数的作用?
class simplecanny
{
ros::NodeHandle nh_;
ros::NodeHandle n;
ros::Publisher pub ;
image_transport::ImageTransport it_;
image_transport::Subscriber image_sub_; //image subscriber
image_transport::Publisher image_pub_; //image publisher(we subscribe to ardrone image_raw)
std_msgs::String msg;
public:
*** simplecanny()
: it_(nh_) ***
{
image_sub_ = it_.subscribe("/ardrone/image_raw", 1, &simplecanny::imageCb, this);
image_pub_= it_.advertise("/arcv/Image",1);
}
~simplecanny()
{
cv::destroyWindow(WINDOW);
}
...
在simplecanny() : it_(nh_)
构造函数中,我不熟悉: it_(nh_)
部分。它做什么?这是操作员过载的情况吗?
提前感谢!
这被称为构造函数初始值设定项列表。它给出了要传递给基类构造函数和类成员的参数。
在您的示例中,它将nh_
传递给it_
的构造函数。
任何没有出现在此列表中的基类或成员都是使用它们各自的默认构造函数构造的。
调用子类初始化列表中的超类构造函数。
单个冒号(:
)不是运算符,而是语言的一部分,表示初始化列表的开始。初始化列表只能在构造函数中使用,用于初始化对象的成员变量和超类子对象。在您的情况下,成员变量it_
是用nh_
初始化的。您可能想要在您选择的texbook中查找初始化列表和构造函数。
它是一个构造函数初始化列表。你可以在上阅读更多关于这个主题的内容。在这种特定的情况下,使用成员初始值设定项列表和在构造函数中赋值之间有区别吗?
它是成员初始化列表。它允许传递正确的参数,并为类的成员和基类的构造函数选择好的构造函数。
标准上写着:
12.6.2初始化基和成员[class.base.init]
在类的构造函数定义中,直接和虚拟基子对象以及非静态数据成员的初始化器可以由ctor初始化器指定,其形式为
ctor-initializer: : mem-initializer-list
成员初始化列表中未指定的任何成员或基类都将使用其默认构造函数。
在这种情况下,将nh_
传递给image_transport::ImageTransport
的构造函数以初始化it_
。
该列表示初始化列表的开始。它用于设置对象的变量。它的另一个重要而有用的特性是调用该类派生的基类的所需构造函数。将其引入C++的详细答案和原因可以在构造函数初始化列表和基类的所需构造函数的调用中找到
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<