-1

有一个注册服务的全局函数:

// 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) 进行注册?它看起来更奇怪,因为没有使用全局变量Registered

4

2 回答 2

3

代码的作者想要一个 bool 标志来说明服务是否已经注册。例如,他可以写

libecap::RegisterService(new Adapter::Service);
static const bool Registered =  true;

前提是 Registered 是一个局部变量。

但是如果 Registered 不是局部变量,那么他可能不会调用其他函数(或 main)之外的函数。因此,定义全局 bool 变量(具有外部或内部链接)并同时调用返回类型为 void 的函数的唯一方法如下

static const bool Registered = (libecap::RegisterService(new Adapter::Service), true);

逗号运算符的表达式结果为真,Registered 将由该值初始化。同时函数 libecap::RegisterService(new Adapter::Service) 将被调用。

作为替代方案,他可以定义一个类,其构造函数将包含函数的调用,而析构函数将包含一些未注册的东西。

于 2014-02-02T14:48:37.050 回答
3

因为您不能将表达式放置在源文件中浮动的空白空间中。只有声明

这是强制在此处计算表达式的常用方法,即使结果对象之后从未实际使用过。

于 2014-02-02T14:52:16.290 回答