我有一个功能:

void AddImage(const Image &im);

此功能不需要更改图像,但它将图像存储为const引用,以供以后使用。因此,此功能不应允许临时使用。在没有任何预防措施的情况下,以下工作:
Image GetImage();

...

AddImage(GetImage());

有没有办法防止此函数调用?

最佳答案

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

  • 使用r-value参数删除重载:void AddImage(const Image &&) = delete;
  • 使用const指针:void AddImage(const Image*)。此方法将在C++ 11之前的
  • 上运行
  • 使用引用包装:void AddImage(std::reference_wrapper<const Image>)

  • 使用支持C++ 11的编译器时,首选第一种方法。这使意图很明确。第二种方法需要对nullptr进行运行时检查,并且无法传达图像不能为空的想法。第三种方法行之有效,使意图很明确,但是,它太明确了。

    关于c++ - 防止为const ref参数传递临时值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40790126/

    10-11 23:15
    查看更多