gpt4 book ai didi

c++ - 通过 clang-format 格式化 lambda 背后的逻辑是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:08 24 4
gpt4 key购买 nike

我在 Emacs(24.5.2 版)中使用 clang-format(3.5 版)。下面是一段由 clang-format 以 LLVM 风格格式化的简单代码:

int main() {
std::cout << "> ";
std::string word;
while (std::cin >> word) {
std::cout << std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0');
}) << std::endl << "> ";
}
return 0;
}

请注意它是如何对齐 lambda 的正文和右括号的。这种格式是否有任何逻辑,或者它只是缺乏对 lambda 的支持?我需要设置 clang-format 的配置参数以获得更好的格式吗?

最佳答案

std::accumulate(word.cbegin(), word.cend(), 0, [](int cur, char ch) { return cur + (ch - '0'); })

这里我们有一个很长的函数调用。为了清理它,我们采用长参数,并将其拆分到自己的行中:

std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) { return cur + (ch - '0'); })

当我们这样做时,我们将参数缩进以与 (:

std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) { return cur + (ch - '0'); })

到目前为止一切顺利。现在我们有一个打开的 {。好吧,这意味着换行

std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0'); })

缩进。缩进的底部在哪里?那么,std::accumulate 的开始。添加4个空格:

std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0'); })

然后我们点击。新行,后缩:

std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0');
})

最后,将它嵌入到一个更大的表达式中间,你就会得到上面的困惑。

以上纯属合理的故事,并非基于 clang-format 的专业知识。我无法告诉您如何让它变得更好。

关于c++ - 通过 clang-format 格式化 lambda 背后的逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31326710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com