有一个注册服务的全局函数:
// services call this to register upon creation
extern void RegisterService(adapter::Service *s);
然后在.cpp文件中的某个地方,某些服务会自行注册:
// create the adapter and register with libecap to reach the host application
static const bool Registered = (libecap::RegisterService(new Adapter::Service), true);
为什么不通过调用libecap :: RegisterService(new Adapter :: Service)来进行注册? 它看起来更奇怪,因为未使用全局变量 已注册 。
答案 0 :(得分:3)
代码的aithor想要一个bool标志来说明服务是否已经注册。他可以写例如
libecap::RegisterService(new Adapter::Service);
static const bool Registered = true;
前提是Registered是一个局部变量。
但是如果Registered不是局部变量,那么他可能不会在某个其他函数(或主函数)之外调用函数。因此,定义全局bool变量(具有外部或内部链接)并同时调用具有返回类型void的函数的唯一方法是以下
static const bool Registered = (libecap::RegisterService(new Adapter::Service), true);
逗号运算符的表达式结果为true,注册将由此值初始化。同时函数libecap :: RegisterService(new Adapter :: Service)将被调用。
作为替代方案,他可以定义一个类,其构造函数将包含函数的调用,而析构函数将包含一些取消注册的东西。
答案 1 :(得分:3)
因为您无法将表达式放在源文件中浮动的空白区域中。只有声明。
这是强制在此处计算表达式的常用方法,即使之后实际上从未使用过该对象。