防止对const参数

时间:2016-11-24 15:33:33

标签: c++ reference const

我有一个功能:

void AddImage(const Image &im);

此函数不需要图像可修改,但它将图像存储为稍后要使用的const引用。因此,这个功能不应该允许临时。没有任何预防措施,以下工作:

Image GetImage();

...

AddImage(GetImage());

有没有办法阻止这个函数调用?

1 个答案:

答案 0 :(得分:5)

有几种机制阻止将临时传递给const ref参数。

  1. 使用r值参数删除重载:void AddImage(const Image &&) = delete;

  2. 使用const指针:void AddImage(const Image*)。此方法将在pre-C ++ 11

  3. 之前运行
  4. 使用参考包装器:void AddImage(std::reference_wrapper<const Image>)

  5. 使用C ++ 11支持编译器时,首选方法应该是首选方法。它使意图明确。第二种方法需要nullptr的运行时检查,并没有传达图像不能为空的想法。第三种方法起作用并使意图明确,但是,它太明确了。