3

virtual戻り値型の前または後の関数宣言にキーワードを配置するかどうかに違いはありますか?

virtual void DoSomething() = 0;
void virtual DoSomething() = 0;

いくつかのレガシーコードをリファクタリングしているときに構文を見つけ、void virtualそれがまったくコンパイルされているのではないかと思っていました...

4

4 に答える 4

5

どちらのステートメントも同等です。
しかし、最初のものはより一般的です。なぜなら、一般的に 必須フィールドは、どの構文(つまり、例の関数プロトタイプ)に最も近い状態に保たれているからです。

virtualオプションのキーワードです(ただし、純粋な場合は必要virtualです)。ただし、return type(ここvoid)は必須のキーワードであり、常に必須です。したがって、人々virtualは左端に留まり、returnタイプは関数のシグネチャに少し近づきます。

別の例:一般的に、以下のコードでは、同じ理由で1番目の構文の方が一般的であることがわかります。

const int i = 0;  // 1
int const i = 0;  // 2
于 2012-03-07T09:23:27.943 に答える
3

2つの間に違いはありません。C++文法では、仮想キーワードをリターンタイプの前後の両方に表示できます。宣言の最初に配置するのが一般的な方法です。

于 2012-03-07T09:22:34.843 に答える
1

どちらの形式も機能しますが、標準では最初の形式が指定されています。

参照:
C ++037.1指定子

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

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

     decl-specifier-seq:
           decl-specifier-seqopt decl-specifier

そしてさらにfunction-specifier説明されている、

7.1.2関数指定子

関数指定子は、関数宣言でのみ使用できます。

 function-specifier:
     inline
     virtual
     explicit
于 2012-03-07T09:37:43.157 に答える
-1

今テスト済み:

両方の方法でコンパイルします。

通常、仮想はリターンタイプの前に置かれます。

詳細はこちら: http: //msdn.microsoft.com/en-us/library/0y01k918%28v=vs.80%29.aspx

于 2012-03-07T09:15:45.440 に答える