「修飾語」の意味は何ですか? 質問する

「修飾語」の意味は何ですか? 質問する

「修飾子」の意味と「修飾子」と「キーワード」の違いは何ですか?

C の修飾子はキーワードであるvolatileと言えますがvolatile、「修飾子」の意味は何でしょうか?

ベストアンサー1

修飾語変数の揮発性や定数性を指定するなど、追加の「品質」を追加します。これらは形容詞に似ています。「気まぐれな男」、「不安定なint", "an腐敗しない女性」、「定数「double」。修飾子の有無にかかわらず、変数自体は同じ量のメモリを占有し、各ビットは状態/値に対して同じ解釈または貢献をします。修飾子は、変数へのアクセス方法や変数の格納場所を指定するだけです。

キーワード定義済み予約済み識別子(おそらく、下記を参照) 言語自体が何らかの意味を割り当てており、ユーザーが独自の目的 (つまり、変数、型、名前空間、関数の名前付けなど) で自由に使用できるようにはなっていません。

  • volatileconst修飾語とキーワードの両方である
  • if、、classnamespaceキーワードですが、修飾子ではありません
  • std、、、mainはすべて識別子ですが、キーワードでも修飾子でもありiostreamませxmy_counter

キーワードの完全なリストはhttp://www.cppreference.com/wiki/keywords/startC++ には現在、キーワードではない修飾子はありません (つまり、句読点記号ではなく、すべて「単語」です)。


修飾子は他の型情報と比較してどこに表示されますか?

「修飾子の意味」から少し離れて、修飾子を使用する構文について、Zaibis が以下のようにコメントしています。

...[修飾子]は、前に何もない場合に、後に続くもののみを修飾します。したがって、const非オブジェクトへのポインタが必要な場合は、次のようconstに記述する必要がありますchar * const var...

 


識別子について少し(たくさん?)

識別子それ自体は、次のような語彙トークン(C++ ソース コードの明確な部分)です。

  • アルファベットまたはアンダースコアで始まる
  • 0個以上の英数字またはアンダースコアで継続

参考になれば幸いですが、識別子は正規表現「[A-Za-z_][A-Za-z_0-9]*」で指定されると考えてください。例としては「egg」、「string」、「__f」、「x0」などがありますが、ない「4e4」(doubleリテラル)、「0x0a」(16 進リテラル)、「(f)」(3 つの字句トークン、中央は識別子「f」)。

    しかし、キーワードは識別子なのでしょうか?

C++ の場合、用語は一貫して使用されていません。一般的なコンピューティングの使用法では、キーワードは識別子のサブセットであり、C++11 標準の一部の場所/使用法はそれを明確に反映しています。

  • 「表 4 に示す識別子はキーワードとして使用するために予約されています」(2.12 キーワードの最初の文)
  • 「C++ のキーワードまたは演算子である識別子...」 (17.6.1.2 脚注 7 より)

(一部の演算子には代替形式( not、、など)がありますが、Visual C++ では、演算子として使用せずにそれらを使用していた古いコードが壊れるのを避けるために、デフォルトでこれらが無効になっています。)andxoror

Potatoswatterがコメントで指摘しているように、他の多くの箇所では標準規格は語彙トークンを定義しておりidentifierkeyword相互に排他的文法内のトークン:

  • 「トークンには、識別子、キーワード、…の 5 種類があります」(2.7 トークン)

状況に応じて判断が変わるエッジケースもあります。

  • 属性トークンに、識別子(2.11)の構文要件を満たすキーワード(2.12)または代替トークン(2.6)が含まれている場合、それは識別子とみなされます。(7.6.1. 属性構文とセマンティクス2)

キーワード以外の識別子は使用すべきではない

「std」や「string」などの一部の識別子は、C++標準で特定の使用法が指定されています。ないただし、キーワードは含まれません。一般に、コンパイラ自体は、それらを独自のコードと区別して扱いません。標準で指定されたヘッダーを含めない場合、コンパイラはおそらく標準で義務付けられている "std" の使用についてさえ認識しません。独自の関数、変数、または "std" と呼ばれる型を作成できる場合があります。ただし、これは良い考えではありません... キーワードと標準ライブラリの一般的な区分を理解することは良いことですが、実装では境界を曖昧にする自由があるため、関連するヘッダーが含まれ、使用方法がドキュメントと一致している場合は C++ 機能が動作すると想定し、競合する可能性のあることは何もしないでください。

おすすめ記事