相关疑难解决方法(0)

我应该通过const-reference传递std :: function吗?

假设我有一个函数,它需要std::function:

void callFunction(std::function<void()> x)
{
    x();
}
Run Code Online (Sandbox Code Playgroud)

我应该x通过const-reference来代替吗?:

void callFunction(const std::function<void()>& x)
{
    x();
}
Run Code Online (Sandbox Code Playgroud)

这个问题的答案是否会根据函数的作用而改变?例如,如果它是一个类成员函数或构造函数,它存储或初始化std::function成成员变量.

c++ reference function

123
推荐指数
3
解决办法
5万
查看次数

我应该复制一个std :: function还是我总能参考它?

在我的C++应用程序中(使用Visual Studio 2010),我需要存储一个std :: function,如下所示:

class MyClass
   {
   public:
      typedef std::function<int(int)> MyFunction;
      MyClass (Myfunction &myFunction);
   private:
      MyFunction m_myFunction;    // Should I use this one?
      MyFunction &m_myFunction;   // Or should I use this one?
   };
Run Code Online (Sandbox Code Playgroud)

如您所见,我在构造函数中添加了函数参数作为引用.

但是,在我的班级中存储该功能的最佳方法是什么?

  • 我可以将函数存储为引用,因为std :: function只是一个函数指针,函数的"可执行代码"保证保留在内存中吗?
  • 如果传递lambda并且调用者返回,我是否必须复制?

我的直觉是说存储引用是安全的(甚至是const引用).我希望编译器在编译时为lambda生成代码,并在应用程序运行时将此可执行代码保存在"虚拟"内存中.因此,可执行代码永远不会被"删除",我可以安全地存储对它的引用.但这是真的吗?

c++ lambda std-function

60
推荐指数
2
解决办法
4万
查看次数

标签 统计

c++ ×2

function ×1

lambda ×1

reference ×1

std-function ×1