4

我的编译器(实际上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不同类型的标准激活,总是一样的......所以:

  • 我错过了什么吗?我无法发现它在最新标准中的语法是正确的……</li>
  • 这是 gcc/llvm 的错误吗?似乎gcc/llvm默默无视了const
  • 这是我错过的功能,我的示例无法证明其有用性吗?

注意:gcc 3.4.3 不编译它,gcc 4.4.5 也不编译。

4

1 回答 1

3

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

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

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

— 构造函数的类名,以及

— 参数列表

我们可以从7.1.2 函数说明符部分看到如下:

function-specifier:
 inline
 virtual
 explicit

在上面的评论中,通过 Ali提交了一个错误报告,该错误报告已得到确认并得到解决。

于 2013-11-12T17:43:00.363 回答