这个程序是否正确 - >使用C ++ 0x N3242

时间:2011-03-17 10:19:31

标签: c++ c++11

  

一个类是一种类型。它的名字成为其中的一个类名(9.1)   范围。

    class-name:
           identifier
           simple-template-id
     

类别指定者和详细类型指定者(7.1.6.3)   用于制作类名。类的对象由(可能为空)组成   成员序列和基类对象。

    class-specifier:
           class-head { member-specificationopt }
    class-head:
           class-key attribute-specifier-seqopt
    class-head-name
    class-virt-specifier-seqopt
    base-clauseopt
    class-key attribute-specifier-seqopt
    base-clauseopt

        class-head-name:
           nested-name-specifieropt class-name
      class-virt-specifier-seq:
           class-virt-specifier
           class-virt-specifier-seq class-virt-specifier
      class-virt-specifier:
           final
           explicit
      class-key:
           class
           struct
           union   
     

class-virt-speci-er-seq应包含   每个最多一个   class-virt-speci fi er。

     

班级负责人省略的班级指定人员   班级名称定义了一个未命名的   类。 [注意:一个未命名的类因此   不能是最终的或明确的。 - 结束   注意]

这里:他们使用了 - >最后,显式为class-virt-speci fi er:

为此我应该这样使用:

 1) struct A{ void f();};
    struct B final : A{void f();};
    int main() {   return 0; }
 2) struct A{ void f();};
    struct B explicit : A{void f();};
   int main() {   return 0; }
   etc...

任何人都可以正确使用...如果错了

AND:请告诉我哪个编译器支持这个功能。(我知道VC ++,GCC 4.6.0支持很多功能) 但海湾合作委员会不支持上述功能。请告诉我该怎么做才能检查这个?

1 个答案:

答案 0 :(得分:1)

看起来它没问题,但我认为任何编译器都没有实现它。

它也可能会有变化,因为有要求删除它:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3234.pdf