C++ 默认函数对象值作为要使用lambda调用的函数参数
我希望有一个方法,该方法使用默认值作为参数的function对象,通过lambda函数调用,例如:C++ 默认函数对象值作为要使用lambda调用的函数参数,c++,c++11,visual-studio-2012,lambda,C++,C++11,Visual Studio 2012,Lambda,我希望有一个方法,该方法使用默认值作为参数的function对象,通过lambda函数调用,例如: #include <iostream> #include <functional> void func(const std::function<void()>& f = {}){ if(f) f(); else std::cout << "or not" << std::endl; } int main() { f
#include <iostream>
#include <functional>
void func(const std::function<void()>& f = {}){
if(f) f();
else std::cout << "or not" << std::endl;
}
int main() {
func([](){ std::cout << "hello" << std::endl; });
func();
}
#包括
#包括
void func(const std::function&f={}){
if(f)f();
其他标准::cout
1) 这是编译器不支持的功能吗
您的测试似乎表明了这一点。这是一个标准功能,因此不支持它意味着编译器不符合标准
2) 两者之间有什么区别吗
没有区别。默认构造函数和接受nullptr_t
的构造函数的行为完全相同。它在VS2015上工作。对于某些定义,它可以编译。拥有默认函数意味着什么?1)它使用c++14
()编译。2)如果你想要一个空的labda,你可以编写:f=[]({}
-不仅仅是f={}
,但如果
@NathanOliver函数包装器的默认状态为空,则始终会进入,这意味着它可能无法调用。您有一个以函数对象作为参数的方法,而不是lambda。您可以使用lambdas调用它,因为std::function中存在一个隐式构造函数,它接受一个参数。
void func(const std::function<void()>& f = nullptr){