14

constとC仕様によってvolatile呼び出されます。cv-qualifier

specifierqualifier( )の正確な違いは何cv-qualifierですか?修飾子は指定子でもありますか?

qualifier左辺値のみの場合は必要ですか?

以外の修飾子は何cv-qualifierですか?

私の上記の理解は意味がありますか?

4

2 に答える 2

7

そのほとんどは意味がありません。

指定子修飾子はC++標準で定義されています。修飾子は、指定子の不可欠な部分にすぎません。たとえば、宣言の型指定子にはcv-qualifiersを含めることができます。このトピックに関する標準からすべてを引用する理由はわかりません。

Cv修飾子は左辺値に制限されていません。クラスタイプの右辺値もcv修飾できます。非クラス型の右辺値をcv修飾することは可能ですが、効果がなく無視されます。

const例で示す修飾子の使用fooは単なる構文形式です。これは、実際には、const-qualifierがメソッドの暗黙thisのパラメーターに適用されることを意味します。つまり、この場合、それは確かに左辺値を修飾しますが、そうではありません。fooconst A* this*thisfoo

修飾子という用語は、修飾名のコンテキストでも表示されます。some_class::some_member(またはsome_namespace::some_name)のような名前は修飾名と呼ばれ、そのsome_class::部分は修飾子です。

何かが左辺値である場合、それを変更できるという考えは完全に間違っています。変更可能な左辺値と変更不可能な左辺値があります。として宣言されたオブジェクトはconst int i = 5左辺値ですが、変更することはできません。通常の関数もC++の左辺値ですが、関数を変更することはできません。

于 2010-08-31T16:24:52.683 に答える
4

cv-qualifier指定子であり、実際には型指定子です。

C ++ 03 7.1の引用:

宣言で使用できる指定子は次のとおりです。

decl-specifier:
  storage-class-specifier
  type-specifier
  function-specifier
  friend
  typedef
decl-specifier-seq:
  decl-specifier-seq_opt
  decl-specifier

...型指定子が定義されている間:

type-specifier:
  simple-type-specifier
  class-specifier
  enum-specifier
  elaborated-type-specifier
  cv-qualifier

単語指定子と修飾子の違いについては、次のとおりです。

cv-unqualifiedの完全または不完全なオブジェクトタイプであるかvoidである各タイプには、そのタイプの3つの対応するcv-qualifiedバージョンがあります:const-qualifiedバージョン、volatile-qualifiedバージョン、およびconst-volatile-qualifiedバージョン。オブジェクトタイプという用語には、オブジェクトの作成時に指定されたcv修飾子が含まれます。decl-specifier-seqにconst指定子が存在すると、const修飾オブジェクト型のオブジェクトが宣言されます。このようなオブジェクトは、constオブジェクトと呼ばれます。decl-specifier-seqに揮発性指定子が存在すると、揮発性修飾オブジェクト型のオブジェクトが宣言されます。このようなオブジェクトは、揮発性オブジェクトと呼ばれます。decl-specifier-seqに両方のcv修飾子が存在する const-volatile-qualifiedオブジェクトタイプのオブジェクトを宣言します。このようなオブジェクトは、constvolatileオブジェクトと呼ばれます。タイプのcv修飾バージョンまたはcv非修飾バージョンは別個のタイプです。ただし、それらは同じ表現と配置の要件を持つものとします。

明確に述べられていませんが、上の段落は違いを示しています。ただし、定義はもっと厳密になる可能性があることを認めます。

于 2010-08-31T16:21:03.377 に答える