为什么 PointerAlignment 选项不起作用?

oar*_*ish 1 c++ formatting clang clang-format

我正在使用version 8.0.0 (tags/google/stable/2019-01-18)带有样式文件的clang-format ( ),我在其中设置了

…
PointerAlignment: Left
…
Run Code Online (Sandbox Code Playgroud)

这成功地转换了这样的声明

const string &foo = "lorem ipsum";
Run Code Online (Sandbox Code Playgroud)

进入

const string& foo = "lorem ipsum";
Run Code Online (Sandbox Code Playgroud)

但是,当我还包含在我的样式文件中时

BasedOnStyle: Google
Run Code Online (Sandbox Code Playgroud)

选项不做任何事情。出于某种原因,它们被基本样式覆盖。这对我来说似乎是荒谬的——显式选项应该覆盖基本样式,不是吗?有人可以解释问题是什么以及如何同时使用BasedOnStylePointerAlignment: Left吗?

oar*_*ish 9

答案是 Google 风格(可以用 来检查它clang-format -style=google -dump-config | less)定义了

DerivePointerAlignment: true
Run Code Online (Sandbox Code Playgroud)

文档说它

如果为 true,则分析格式化文件中最常见的 & 和 * 对齐方式。指针和参考对齐样式将根据文件中的首选项进行更新。PointerAlignment 然后仅用作后备

这意味着DerivePointerAlignment: false如果要自己处理它,必须明确设置。