指定std :: function的默认值
void func(const std::function<void()>& f = empty) { if(f) f(); }  什么是'空'应该是? 我使用[](){} 。 但从技术上讲,这不是空的,f()将执行。 
 void func(const std::function<void()>& f = {}) { if(f) f(); } 
现场演示
 const std::function<void()>& f = nullptr 
要么
 const std::function<void()>& f = std::function<void()>() 
 我会使用nullptr为空的情况。 它可以被使用,因为你从来不使用全function的对象,但只有指针,所以func(f1); 将事实上func(&f1) =>你总是会传递指向func的指针,所以nullptr是恕我直言最好的候选人。 
这个编译和运行:
 void func(const std::function<void()>& f = nullptr) { if(f) f(); } 
使用默认function的替代方法是:
 void func(const std::function<void()>& f = std::function<void()>()) { try { f(); } catch(std::bad_function_call e) { } } 
使用exception捕获。 2之间的select主要取决于你是否期望空的情况发生; 几乎从来没有:有时与例外与去:在通话之前testing。
 由于问题提到if (f) ,使用nullptr 
你可以这样尝试:
 const std::function<void()> & f = std::function<void()>() 
正如巴西尔补充说的,标准说:
§20.8.11.1类bad_function_call [func.wrap.badcall]
1 /当函数包装器对象没有目标时,由function :: operator()(20.8.11.2.4)抛出bad_function_calltypes的exception。