c++11 - C++11 lambda 的正确缩进

标签 c++11 lambda indentation

是否有一种公认的“标准”方式来格式化 C++ >= 11 中的 lambda 表达式?尤其是当放入通用算法时。

例如:

1)

auto it = std::find_if(myVec.begin(),
                       myVec.end(),
                       [id = 42] (const Element& e)
{ return e.id() == id;});

或者 2)

auto it = std::find_if(myVec.begin(),
                       myVec.end(),
                       [id = 42] 
                       (const Element& e)
                       { return e.id() == id;});

或者 3)

auto it = std::find_if(myVec.begin(),
                       myVec.end(),
                       [id = 42] (const Element& e)
                       { 
                           return e.id() == id;
                       });

或者4)

auto it = std::find_if(myVec.begin(),
                       myVec.end(),
                       [id = 42] (const Element& e)
{ 
    return e.id() == id;
});

或者回车、空格、制表符的任何其他组合... 注意:我在代码中使用 Allman 风格,所以理想情况下它是“适合相同的风格”。

最佳答案

我一直更喜欢为缩进的相对级别赋予其自己的语义值,并将结束分隔符与包含其匹配的开始分隔符的行垂直对齐。这使得复杂的语句(例如使用 lambda 表达式作为参数的语句)更易于阅读:

auto it = std::find_if(
  myVec.begin(),
  myVec.end(),
  [id = 42] (const Element& e){ return e.id() == id;}
);

或者(例如,如果 lambda 主体对于一行来说太长)

auto it = std::find_if(
  myVec.begin(),
  myVec.end(),
  [id = 42] (const Element& e){ 
    return e.id() == id;
  }
);

关于c++11 - C++11 lambda 的正确缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26510888/

相关文章:

c++11:如何编写包装函数来生成 `std::function` 对象

c++ - 为什么这个 lambda [=] 捕获会创建多个拷贝?

java - 原始字符串文字 - 删除前导缩进

java - 无法将内部类转换为 Lambda

Flutter:有没有办法显示多项目符号列表?

java - 自动缩进 Java 和 HTML 文件的脚本或程序

c++ - 使用alignas 进行参数包扩展的语法是什么?

c++ - 任何人都可以解释 boost::thread 的这个意外结果吗?

c++ - 提取模板类默认参数

lambda - 将 F# func 转换为 Expression<Func<..,..>>