void func(const std::function<void()>& f = empty)
{
if(f)
f();
}
Run Code Online (Sandbox Code Playgroud)
什么是'空'应该是什么?我用[](){}.但从技术上讲,这不是空的,f()将执行.
101*_*010 53
void func(const std::function<void()>& f = {}) {
if(f) f();
}
Run Code Online (Sandbox Code Playgroud)
nh_*_*nh_ 20
const std::function<void()>& f = nullptr
Run Code Online (Sandbox Code Playgroud)
要么
const std::function<void()>& f = std::function<void()>()
Run Code Online (Sandbox Code Playgroud)
Ser*_*sta 10
我会使用nullptr为空案例.它可以使用,因为你从不使用完整的函数对象,但只指向它们,所以func(f1);实际上 func(&f1)=>你总是将指针传递给func,所以nullptr恕我直言是最好的候选者.
这编译并运行:
void func(const std::function<void()>& f = nullptr)
{
if(f)
f();
}
Run Code Online (Sandbox Code Playgroud)
使用默认函数的替代方法是:
void func(const std::function<void()>& f = std::function<void()>()) {
try {
f();
}
catch(std::bad_function_call e) {
}
}
Run Code Online (Sandbox Code Playgroud)
使用异常捕获.2之间的选择主要取决于你是否期望空案发生; 几乎从不:有时与异常相比:在通话前测试.
问题提到if (f),使用nullptr