1

Google C++ スタイル ガイド、特に参照引数に関するセクションに従おうとしています。常に const 参照として参照を渡すように指示されています。この関数が私のFilterBank. ただし、 Instrument には を変更する必要がある場所がある*filter_ため、filter_const にすることは適切な解決策ではありません。これは、代わりにポインターを渡す必要があるということFilterBank *fですか? それを行うのは単にスタイルの問題ですか?必要に応じて、この関数で変更できるものは何でもf変更できますが、これは私が避けようとしていることです。

//This code assigns the instrument's filter to some pre-made filter, f
void Instrument::set_filter_bank(FilterBank &f) {
  filter_ = &f;
}

ありがとう!

4

2 に答える 2

0

これは、あなたが与えたリンクの「決定」セクションで説明されているように見えます:

決断:

関数パラメーター リスト内では、すべての参照が const でなければなりません。

void Foo(const string &in, string *out);

実際、入力引数は値または const 参照であり、出力引数はポインターであるというのは、Google コードの非常に強力な規則です。入力パラメーターは const ポインターである場合がありますが、swap() などの規則で必要な場合を除き、非 const 参照パラメーターは許可されません。

ただし、入力パラメーターに const T& よりも const T* を使用する方が望ましい場合があります。次に例を示します。 •ヌル ポインタを渡したい。•関数は、入力へのポインタまたは参照を保存します。ほとんどの場合、入力パラメーターは const T& として指定されることに注意してください。代わりに const T* を使用すると、入力が何らかの形で異なる方法で処理されることがリーダーに伝えられます。したがって、const T& ではなく const T* を選択する場合は、具体的な理由があります。そうしないと、存在しない説明を探させて読者を混乱させる可能性があります。

入力値を関数に渡す場合は const 参照を使用するが、出力値を定義する場合はポインターを使用すると言っているように見えます。これは、関数が何を期待しているかを消費者に明確にするためです。const は、ポインターを変更しないという約束を強制します。

于 2013-10-17T03:34:52.343 に答える