我有一个功能:
void AddImage(const Image &im);
此函数不需要图像可修改,但它将图像存储为稍后要使用的const引用。因此,这个功能不应该允许临时。没有任何预防措施,以下工作:
Image GetImage();
...
AddImage(GetImage());
有没有办法阻止这个函数调用?
答案 0 :(得分:5)
有几种机制阻止将临时传递给const ref参数。
使用r值参数删除重载:void AddImage(const Image &&) = delete;
使用const指针:void AddImage(const Image*)
。此方法将在pre-C ++ 11
使用参考包装器:void AddImage(std::reference_wrapper<const Image>)
使用C ++ 11支持编译器时,首选方法应该是首选方法。它使意图明确。第二种方法需要nullptr
的运行时检查,并没有传达图像不能为空的想法。第三种方法起作用并使意图明确,但是,它太明确了。