请帮助理解C++:运算符

Please help understand the C++ : operator

本文关键字:运算符 C++ 帮助 助理      更新时间:2023-10-16

请有人向我解释一下这个运算符在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++的详细答案和原因可以在构造函数初始化列表和基类的所需构造函数的调用中找到