4

非プライベート メソッドへのパラメーターがプライベート タイプ (プライベート ネスト クラスなど) の場合、g++ も javac も警告を発しません。このようなメソッドはクライアントでは使用できませんが、クラスのパブリック API の一部として表示できます。

たとえば、C++ では、そのようなメソッドをクラス Foo の public セクションに配置すると、クラス Foo 内でフレンドとして明示的にリストされていなくても、他のクラスがこれらのメソッドにアクセスできるようになります (パラメーターとして使用されるプライベート型にアクセスできる限り)。

しかし、一般的に、そのようなメソッドを明示的に非公開にしないのは悪いスタイルでしょうか?それとも無視してもよいのでしょうか? (とにかくクライアントはそれを使用できないため、大したことはありません)

4

2 に答える 2

4

これは許可されており、必要になる場合があります。

private 型の変数を作成することは許可されていない場合があります。関数によって返される場合があります。これにより、データへの参照を保持する理由のないシステムの部分で永続化することなく、システム全体でデータを転送できます。

このイディオムは一般的ではありませんが、許可されています。

于 2011-07-31T09:28:46.547 に答える
3

スタイル的には、これらのメソッドをパブリック API の一部として使用することは、悪いスタイルと見なされると想像する必要があります。ライブラリを操作しているときに、実際には呼び出せないメソッドが IDE のオートコンプリート ダイアログに表示されるのを本当に見たいですか? 私はそうは思わない。

コンパイラの警告が表示されない理由については、ほとんどの (おそらくすべての?) オブジェクト指向言語 (および Java の場合も) では、ユーザー定義の Object 型は、ポインターを使用してメソッドに単純に渡されます。したがって、参照を関数パラメーターとして渡すために実際の型に関する知識は必要なく、ポインターに関する知識だけが必要です。そして、コンパイラーが気にする限り、誰もがポインターの作成方法について知識を持っているため、「これを実際に外部から呼び出すことはできません」と言う根拠はありません。少なくとも、 の値で呼び出すことができますnull

于 2011-07-31T09:33:31.393 に答える