'static const rvalue'会有意义吗?

时间:2015-03-14 03:51:31

标签: c++ static const rvalue

给定一个定义一个事件的类并且有一个代价高昂的构造函数(在我的例子中,它计算事件名称的哈希,以便我以后可以对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,那我可以做到这一点,我不知道是否可能......它有意义吗?

谢谢!

0 个答案:

没有答案