Const 引数による関数のオーバーロード
C では、関数のオーバーロードを使用すると、渡される引数に応じて、同じ名前の複数の関数を使用できます。彼ら。ただし、状況によっては、非ポインター、非参照型の定数のみに基づいて関数をオーバーロードすることは実現できません。
次のコード スニペットを考えてみましょう。
class Test { public: int foo(int); int foo(const int) const; };
Inこの例では、foo 関数をオーバーロードすることを目的としています。一方の関数は const 関数で、もう一方の関数は const 関数ではありません。しかし、このコードでは、関数をオーバーロードできないことを示すコンパイル エラーが発生します。
これはなぜ発生しますか?
コンパイラは、const キーワードが存在するにもかかわらず、どの関数を呼び出すかを明確にすることができません。議論。値によって渡される場合、引数の定数に関係なく値がコピーされます。したがって、引数の const は、関数定義自体の中でのみ関連します。
その結果、コンパイラは、引数の定数だけに基づいて、どのバージョンの foo 関数を呼び出すかを決定できません。
以上がC で非ポインター/非参照引数の定数に基づいて関数をオーバーロードできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。