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

Don*_*nzo 2 c++ lambda c++11

所以这就是代码的样子:

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

这是什么意思?它是每个循环吗?开头的括号有什么作用?括号有什么作用?箭头是什么意思?由于没有C++11编译器,我无法编译它,我在C++参考中也找不到它。

Mik*_*our 6

这是什么意思?

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

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

它是每个循环吗?

不,那看起来像

for (auto thing : sequence) {/* code */}
Run Code Online (Sandbox Code Playgroud)

开头的括号有什么作用?

它们表示它是一个 lambda。它们可以包含您想要提供给 lambda 内的代码的局部变量的捕获列表

箭头是什么意思?

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

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

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