c++的{}和()

{} 提供列表初始化的功能,最终调用的是构造函数。比如

Point{ }

调用的是Point::Point()构造函数。而

Point{x,y}

调用的是Point::Point(x,y)构造函数。

所以,{ } 以初始化列表的方式explicit的调用了构造函数。提供了除了New,Operator New, placement New以外的创造新类的方法。

构造出一个匿名的类直接使用 Point{}即可,它调用构造函数,但是临时的,没有名字来指向它。所以调用完再也无法找到这个匿名类。

Point{}; // 调用构造,收工。

通常情况下我们使用有名字的类 ,这样后面的代码可以引用:

Point a{}; // a这个类可以在后面用。

为了使用类的这种匿名功能,通常标准库会这样玩,比如<utility>头文件中的std::hash就可以这样使用:

std::hash<std::string>{}(“/sensor/percept/lidar_topic”);

它得到一个size_t的hash字符串。

发表评论

电子邮件地址不会被公开。 必填项已用*标注