56

私のC++クラスのこれら2つのステートメントの違いを理解していません。

class MyClass {
  public:
  private:
     static const int var = 0;            // Option 1
     const static int var = 0;            // Option 2
};

オプション1とオプション2の違いは何ですか?どちらもコンパイルします。

4

4 に答える 4

68

それらはまったく同じことを意味します。読みやすいと思う方を自由に選択できます。

Cでは、最初に配置する必要staticがありますが、まだ必須ではありません。この点でC++がCに続いているかどうかはわかりません。

6.11.5ストレージクラス指定子

1宣言内の宣言指定子の先頭以外にストレージクラス指定子を配置することは、廃止された機能です。

于 2012-08-17T12:41:39.167 に答える
45

staticconst(ここではとにかく)とタイプ(例int)はすべて宣言指定子の一部です。 歴史的に、宣言指定子はキーワードとタイプ名の順序付けられていないリストでした。したがって、次のようになります。

static unsigned int const var;
static unsigned const int var;
static int unsigned const var;
static int const unsigned var;
static const unsigned int var;
static const int unsigned var;
unsigned static int const var;
unsigned static const int var;
unsigned int static const var;
unsigned int const static var;
unsigned const static int var;
unsigned const int static var;
int static unsigned const var;
int static const unsigned var;
int unsigned static const var;
int unsigned const static var;
int const static unsigned var;
int const unsigned static var;
const static unsigned int var;
const static int unsigned var;
const unsigned static int var;
const unsigned int static var;
const int static unsigned var;
const int unsigned static var;

すべて合法であり、すべて同じことを意味していました。

これはCとC++の両方に当てはまると思いますが、私が間違っていなければ、Cはストレージクラス指定子(static)を最初以外の場所に配置することを非推奨にしました。いずれにせよ、これはほぼ普遍的な慣習であるため、通常はstatic (およびexternなど)を先頭に置く必要があります。

順序付けされていないことは、宣言指定子にのみ適用されることにも注意してください。以下の宣言子の中で、cv-qualifier(s)はそれらが修飾するものに従わなければなりません。直交性の理由から、通常は常にcv-qualifiersを変更したもの(つまりint const、ではなくconst int)の後に配置する必要があります。

最後に、型の前に型修飾子を表示し、長さ修飾子(、または)の前に符号付き修飾子(signedまたは )を付けることは、広く行われている規則のようです。また、修飾子が存在する場合はドロップすることもかなり頻繁にあるため、人々は、ではなく、、および ではなく、を記述します。ただし、これは普遍的ではありません。unsignedshortlonglong longintunsignedunsigned intlonglong int

これを考えると、上記の宣言を書く最初の方法が好まれますが、を削除することは非常に許容されますint

于 2012-08-17T12:57:32.000 に答える
7

それらは同じです。しかし、キーワードがデータ型を定義するときに並置すると、キーワードconstとの適合性が向上するという単純な理由から、私は常にオプション1を選択します。int一方、キーワードstaticはその変数のアクセシビリティを定義します。

于 2012-08-17T12:52:26.693 に答える
3

それらは同じです。このディスカッションを参照してください:http://bytes.com/topic/c/answers/140177-const-static-vs-static-const

于 2012-08-17T12:43:26.010 に答える