构造函数定义是否可以以"类"为前缀。关键词?

时间:2014-07-24 17:49:39

标签: c++ visual-studio-2012 visual-studio-2013 compiler-bug

请告诉我为什么我的程序在编译和执行时,我将构造函数视为没有私有和公共部分的类,只需在其前面写下class,如下所示:

class sample
{
private:
    int a,b;

public:
    class sample(int a1){a = a1;}
};

2 个答案:

答案 0 :(得分:5)

这不是有效的,我的编译器拒绝它。必须使用类名声明构造函数,没有类密钥(即没有classstructunion关键字。)

也许你的编译器接受详细的类型说明符作为构造函数名称;但如果是这样,这是一个非标准的扩展,你不应该依赖它。如果你很幸运,编译器可能会提供一个禁用扩展的选项,如果你不希望永远绑定到该编译器,你应该使用它。

答案 1 :(得分:1)

您提供的代码违反了规范,技术上无法编译:

  

12.1构造函数

     

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

     

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

     

- 构造函数的类名和

     

- 参数列表

     

按此顺序。在这样的声明中,忽略构造函数类名称周围的可选括号。

function-specifier 表示inlinevirtualexplicit之一 - 请参阅7.1.2 / 1 - 但不允许使用虚拟构造函数by 12.1 / 4)

也就是说,Microsoft Visual C ++ 2012和2013(至少)接受它。这似乎是那些编译器中的错误。

更新:微软已经意识到了这个问题,但已经(可以理解)决定不去修理它。

Bug report