1. ホーム
  2. c++

[解決済み] クラス宣言中括弧の後のセミコロン

2023-05-08 23:29:03

質問

C++のクラスでは、なぜ閉じ中括弧の後にセミコロンがあるのですか?私は定期的にそれを忘れて、コンパイラのエラーが発生し、それ故に時間が失われます。私にはやや余計なことのように思えますが、そうである可能性は低いでしょう。人々は本当にこのようなことをするのでしょうか?

class MyClass
{
.
.
.
} MyInstance;

構造体や列挙型の場合はCとの互換性の観点から理解できますが、クラスはC言語の一部ではないので、主に類似の宣言構造間の一貫性を保つためにあるのだと思われます。

私が探していたのは、何かを変更できるというよりも、設計の合理性に関連するものでした。

どのように解決するのですか?

型宣言の閉じ中括弧の後のセミコロンは、言語が要求しているものです。 C の最も古いバージョンからそうなっています。

そして、そう、人々はあなたが今そこに置いた宣言を実際に行います。 これはメソッドの中にスコープされた型を作成するのに便利です。

void Example() {
  struct { int x; } s1;
  s1.x = 42;

  struct ADifferentType { int x; };
}

この場合、なぜセミコロンが必要なのかは明らかだと思います。 ヘッダーファイルで宣言する一般的なケースでなぜセミコロンが必要なのかについては、私にはよくわかりません。 私の 推測 は、歴史的なものであり、コンパイラーを書くことを容易にするために行われたのだと思います。