为什么PointerAlignment和PointerBindsToType选项不起作用?

时间:2019-06-11 06:36:42

标签: c++ formatting clang clang-format

我正在将clang格式(version 8.0.0 (tags/google/stable/2019-01-18))与样式文件一起使用,并在其中设置

…
PointerAlignment: Left
PointerBindsToType: true
…

这成功地转换了诸如此类的声明

const string &foo = "lorem ipsum";

进入

const string& foo = "lorem ipsum";

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

BasedOnStyle: Google

该选项不执行任何操作。由于某些原因,它们会被基本样式覆盖。这对我来说似乎是荒谬的–显式选项应该替代基本样式,不是吗? 有人可以解释问题是什么以及如何同时使用BasedOnStylePointerBindsToType: true吗?

1 个答案:

答案 0 :(得分:1)

答案是Google样式(可以用clang-format -style=google -dump-config | less进行检查)定义了

DerivePointerAlignment: true

文档说明了

  

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

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