默认函数对象值作为要用lambda调用的函数参数

时间:2017-02-06 13:39:59

标签: c++ c++11 visual-studio-2012 lambda

我希望有一个带有默认值作为参数的函数对象的方法,用lambda函数调用,例如:

#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();
}

但在Visual Studio 2012上,这不会编译(例如,它使用Visual Studio 2015或g ++编译),抱怨默认值{}。将其更改为:

void func(const std::function<void()>& f = nullptr){

解决问题。 1)这是编译器不支持的功能吗? 2)两者之间有什么区别吗?

1 个答案:

答案 0 :(得分:1)

  

1)这是编译器不支持的功能吗?

您的测试似乎表明情况就是这样。这是一个标准功能,因此不支持它意味着编译器不符合标准。

  

2)两者之间有什么区别吗?

没有区别。默认构造函数和采用nullptr_t的构造函数的行为完全相同。