请告诉我为什么我的程序在编译和执行时,我将构造函数视为没有私有和公共部分的类,只需在其前面写下class
,如下所示:
class sample
{
private:
int a,b;
public:
class sample(int a1){a = a1;}
};
答案 0 :(得分:5)
这不是有效的,我的编译器拒绝它。必须使用类名声明构造函数,没有类密钥(即没有class
,struct
或union
关键字。)
也许你的编译器接受详细的类型说明符作为构造函数名称;但如果是这样,这是一个非标准的扩展,你不应该依赖它。如果你很幸运,编译器可能会提供一个禁用扩展的选项,如果你不希望永远绑定到该编译器,你应该使用它。
答案 1 :(得分:1)
您提供的代码违反了规范,技术上无法编译:
12.1构造函数
1 构造函数没有名称。特殊的声明符语法用于声明或定义构造函数。语法使用:
- 一个可选的decl-specifier-seq,其中每个decl-specifier都是一个函数说明符或constexpr,
- 构造函数的类名和
- 参数列表
按此顺序。在这样的声明中,忽略构造函数类名称周围的可选括号。
( function-specifier 表示inline
,virtual
或explicit
之一 - 请参阅7.1.2 / 1 - 但不允许使用虚拟构造函数by 12.1 / 4)
也就是说,Microsoft Visual C ++ 2012和2013(至少)接受它。这似乎是那些编译器中的错误。
更新:微软已经意识到了这个问题,但已经(可以理解)决定不去修理它。