CTOR 声明/定义中接受的 const 限定符(LLVM 错误?)

const qualifier accepted in ctor declaration/definition (llvm bug?)

本文关键字:LLVM 错误 const 定义 声明 CTOR      更新时间:2023-10-16

我的编译器(实际上是Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn))接受(编译)该代码:

class X {
private:
  int i;
public:
  const X() { cout << "here" << endl; i=0; }
  void f() const {}
  void g() {}
};
int main() {
  const X x;
  x.f();
  //  x.g();
  X y;
  y.f();
  y.g();
}

它的工作原理就好像没有const限定符引导 ctor 定义一样。我尝试了-Wall-pedantic不同类型的标准激活,总是相同的......所以:

  • 我错过了什么吗?我无法发现它在最新标准中的语法正确......
  • 这是 GCC/LLVM 的错误吗?看来gcc/llvm默默地忽略了const.
  • 这是我错过的功能,并且我的示例无法证明其有用性吗?
注意:gcc 3.4.3

不编译它,也不编译 gcc 4.4.5。

据我所知,这看起来不像有效的语法,C++构造函数12.1标准部分的草案第 1 段说:

构造函数没有名称。特殊的声明符语法用于声明或定义构造函数。 语法使用:

— 一个可选的 decl-specifier-seq,其中每个 decl-specifier 要么是函数说明符,要么是 constexpr,

— 构造函数的类名,以及

— 参数列表

我们可以从第 7.1.2 节中看到函数说明符如下:

function-specifier:
 inline
 virtual
 explicit

通过阿里在上面的评论中提交了错误报告,并已确认并解决了。