6

宣言内の関数の引数名 (ヘッダー ファイルに存在する可能性が最も高い) は、コンパイラによって完全に無視されているように見えます。宣言バージョン 1 または 2 のいずれかを使用して以下をコンパイルできるようにする理由は何ですか?


実装

void A::doStuff(int numElements, float* data)
{
    //stuff
}

宣言 - バージョン 1

class A
{
public:
    void doStuff(int numElements, float* data);
}

宣言 - バージョン 2

class A
{
public:
    void doStuff(int, float*);
}
4

5 に答える 5

11

コンパイラは、メソッドが必要とする引数の種類を知るだけで済みます。コンパイラにとって、それらをどのように呼び出すかは重要ではありません。

コンパイラは、いくつかの理由で引数の型を知る必要があります。

  • 同じメソッド名のメソッドが複数ある場合に使用するメソッドを決定する
  • 入力パラメーターが有効かどうかを判断する
  • パラメータをキャストする必要があるかどうかを決定する
  • メソッドを呼び出して応答を処理するコードを生成する方法を決定する

ただし、最初のヘッダー バージョンを使用することをお勧めします。他の開発者 (および自分自身) が関数を使用し、どのパラメーターがどの意味を持っているかを知るのに役立ちます。

于 2012-04-19T09:20:40.317 に答える
6

Parameter names aren't part of the function signature. Unless you use them, you don't need to have names even in the function implementation.

于 2012-04-19T09:18:41.547 に答える
5

Because the names don't affect anything the compiler does outside the function.

于 2012-04-19T09:18:33.000 に答える
1

The only reason I can think about that version 1 is better is readability. They are ignored as they don't matter for the compiler.

于 2012-04-19T09:18:31.603 に答える
1

..ヘッダーが他のモジュールに含まれている場合、正しいコードを生成するために必要なのは型だけです。名前はしばしば便利で便利ですが、絶対に必要なものではありません。

于 2012-04-19T09:21:55.003 に答える