C ++中奇怪的括号括号表示法,看起来有点像每个循环

时间:2014-02-26 10:32:02

标签: c++ c++11 lambda

这就是代码的外观:

auto generateHash = [](std::vector<File> &files) -> std::shared_ptr<std::string> {
    // Other code here
}

这是什么意思?它是针对每个循环的吗?一开始的括号是做什么的?括号做什么?箭头是什么意思?我无法编译它,因为没有C ++ 11编译器,我在C ++参考中找不到它。

3 个答案:

答案 0 :(得分:4)

  

这是什么意思?

这是一个 lambda - 一个函数对象。你可以把它称为带有文件向量的函数(由于一些奇怪的原因通过可变引用传递),并且它返回一个字符串(由共享指针管理,出于某种奇怪的原因)。

std::vector<File> files = get_some_files();
std::shared_ptr<std::string> hash = generateHash(files); // call the lambda
  

每个循环都是一个吗?

没有。看起来像是

for (auto thing : sequence) {/* code */}
  

开头的括号有什么作用?

他们表示这是一个lambda。它们可以包含您希望为lambda中的代码提供的局部变量的捕获列表

  

箭头意味着什么?

这是尾随返回类型。在C ++ 11中,如果需要,可以将该语法与普通函数一起使用;但这是指定lambda返回类型的唯一方法。

  

我在C ++参考资料中找不到它。

就在这里:http://en.cppreference.com/w/cpp/language/lambda

答案 1 :(得分:1)

这是lambda函数,参见例如http://en.cppreference.com/w/cpp/language/lambda

答案 2 :(得分:0)

这是一个C ++ 11 lambda函数,有关它们如何工作的教程,你可以查看this,否则你可以查看this的纯参考。

在您的情况下,它定义了一个匿名函数,该函数接收std::vector<File> &files并返回std::shared_ptr<std::string>,并将此函数分配给generateHashauto关键字告诉编译器派生generateHash的类型(在这种情况下,它用于简单的简写)。空括号([])表示lambda不捕获和局部变量在lambda中使用。