给定一个定义一个事件的类并且有一个代价高昂的构造函数(在我的例子中,它计算事件名称的哈希,以便我以后可以对int而不是事件名字符串进行比较),我发现为了不重复构造操作而去的方法是使用静态const声明,因此它第一次构造并一次又一次地重复使用。
让我们说事件类的构造函数是这样的:
Event(const char *name);
我有一个函数来发送像这样的事件:
send(const Event &e);
我想以类似以下的方式发送活动:
// For instance
send("myevent");
...
// Or even
send(Event("myevent"));
但是当然每次发送事件时都会调用Event构造函数。我想出的第一个解决方案是在调用之前声明一个静态const:
static const Event myevent("myevent");
send(myevent);
这不是太糟糕,但为了将此构造转换为单行语句,我可以使用预处理器:
// Preprocessor macro
#define SEND(event_name) \
{ static const Event myevent(event_name); \
send(myevent); }
...
// And then later
SEND("myevent");
虽然我希望尽可能不使用预处理器。如果我能告诉编译器我想要一个像本例中的Event实例那样的rvalue是静态const,那我可以做到这一点,我不知道是否可能......它有意义吗?
谢谢!