2010-07-20

attributeの書ける場所が間違っていた

この記事は間違っている。クラス宣言の先頭にattribute-specifierを指定しても、クラス定義には属さない。なぜならば、クラス定義は、class-specifierであるので、class C {} c ;のような記述ができる。したがって、クラスの場合は、class-keyとidentifierの間に書かなければならない。

以下、過去に書いた間違っている文章。

クラスの場合、以下の二行は、同じ意味である。

class [[ final ]] name ;
[[ final ]] class name ;

よく考えたら、class-specifierも、type-specifierに含まれるので、それはつまり、クラスの宣言と定義は、simple-declarationであるという単純なことを忘れていた。

さて、attributeを教える際には、attributeを指定する場所を、どのように教えるべきだろうか。初心者には、先頭に書く方が、分かりやすいと思う。しかし、私のように言語仕様的に考える人間にとっては、、変数や関数の場合は、識別子の後に書くのが自然であるし、クラスは、class-keyと識別子の間に書くのが自然だ。さてどうするか。

2 comments:

  1. > 言語仕様的に考える人間にとっては、変数や関数の場合は、識別子の後に書くのが自然であるし、クラスは、class-keyと識別子の間に書くのが自然だ。

    なぜ,このような書き方が自然なんですか?
    「自然である」という言葉の意味がよくわからないです.

    ReplyDelete
  2. たとえば、noreturnは、関数宣言のdeclarator-idに指定するものと定義されています。
    そういうわけで、
    void f [[noreturn]] () ;
    と書けるわけです。

    一方、関数の宣言には、先頭にもattributeを書くことができ、それは「関数に属する」と定義されています。
    つまり、
    [[noreturn]] void f() ;
    は、
    void f [[noreturn]] () ;
    と書くのと同等の意味になるのです。

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.