我的编译器(实际上是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
默默地忽略了const
。注意:gcc 3.4.3不编译它,也不编译gcc 4.4.5。
答案 0 :(得分:3)
据我所知,这似乎不是有效的语法,draft C++ standard部分12.1
构造函数段 1 表示:
构造函数没有名称。特殊的声明符语法用于声明或定义构造函数。 语法使用:
- 一个可选的decl-specifier-seq,其中每个decl-specifier都是一个函数说明符或constexpr,
- 构造函数的类名和
- 参数列表
我们可以从7.1.2
部分看到函数说明符如下:
function-specifier:
inline
virtual
explicit
在[{3}} a comment above中通过Ali提交了相关信息,并确认并解决了该问题。