你能解释一下这个语法吗:ros::Rate loop_rate(10);

Ale*_*ers 2 c++ syntax ros

我试图理解这行代码

 ros::Rate loop_rate(10);
Run Code Online (Sandbox Code Playgroud)

它似乎正在创建某种对象,但这看起来像一个函数调用,我看不到对象的名称。这行代码在做什么?我了解 ros 中的 loop_rate 是什么,但我是 C++ 新手,不了解语法。

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker");

  ros::NodeHandle n;

  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);

  ros::Rate loop_rate(10);



  int count = 0;
  while (ros::ok())
  {
    std_msgs::String msg;

    std::stringstream ss;
    ss << "hello world " << count;
    msg.data = ss.str();

    ROS_INFO("%s", msg.data.c_str());

    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();
    ++count;
  }


  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 5

这没有什么险恶的。

事实上,这是一个非常简单的变量声明。

类型是ros::Rate,名称是loop_rate,唯一的构造函数参数是10

它看起来确实有点像函数调用,但它不是。(它也有点像函数声明,一不小心就会出问题!)

就像是:

std::string str("Hi!");
Run Code Online (Sandbox Code Playgroud)

或者:

Rectangle rect(10, 5);
Run Code Online (Sandbox Code Playgroud)

甚至:

int x(42);
Run Code Online (Sandbox Code Playgroud)

对于内置函数,我们中的许多人倾向于使用旧式复制初始化:

int x = 42;
Run Code Online (Sandbox Code Playgroud)

...虽然这对于大多数类类型来说不太可行。

您可能需要查看C++ 书中的声明语法吗?