我有一个 C++ 数据结构,它是其他计算所需的“便签本”。它的寿命不长,并且不经常使用,因此对性能不是很重要。但是,它包括一个随机数生成器以及其他可更新的跟踪字段,虽然生成器的实际值并不重要,但重要的是更新值而不是复制和重用。 这意味着一般来说,此类的对象是通过引用传递的。
如果一个实例只需要一次,最自然的方法是在需要的地方构造它们(可能使用工厂方法或构造函数),然后将暂存器传递给使用方法。消费者的方法签名使用按引用传递,因为他们不知道这是唯一的用途,但是工厂方法和构造函数按值返回 - 您不能通过引用传递未命名的临时对象。
有没有办法避免用讨厌的临时变量阻塞代码?我想避免以下事情:
scratchpad_t<typeX<typeY,potentially::messy>, typename T> useless_temp = factory(rng_parm);
xyz.initialize_computation(useless_temp);
我可以在本质上制作暂存器mutable
并标记所有参数const &
,但这并没有让我觉得这是最佳实践,因为它具有误导性,而且对于我无法完全控制的课程,我不能这样做。通过右值引用传递将需要向所有暂存器消费者添加重载,这违背了目的 - 具有清晰简洁的代码。
考虑到性能并不重要(但代码大小和可读性是关键),传递这样一个暂存器的最佳实践方法是什么?如果需要, 可以使用 C++0x 功能,但最好仅使用 C++03 功能就足够了。
编辑: 需要明确的是,使用临时是可行的,这只是我想避免的代码中的不幸混乱。如果你从不给临时文件起个名字,它显然只使用过一次,而且要阅读的代码行数越少越好。此外,在构造函数的初始化程序中,不可能声明临时对象。