ホームページ  >  記事  >  バックエンド開発  >  C で非ポインター/非参照引数の定数に基づいて関数をオーバーロードできないのはなぜですか?

C で非ポインター/非参照引数の定数に基づいて関数をオーバーロードできないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-20 11:40:41303ブラウズ

Why Can't I Overload Functions Based on the Constness of Non-Pointer/Non-Reference Arguments in C  ?

Const 引数による関数のオーバーロード

C では、関数のオーバーロードを使用すると、渡される引数に応じて、同じ名前の複数の関数を使用できます。彼ら。ただし、状況によっては、非ポインター、非参照型の定数のみに基づいて関数をオーバーロードすることは実現できません。

次のコード スニペットを考えてみましょう。

class Test {
public:
    int foo(int);
    int foo(const int) const;
};

Inこの例では、foo 関数をオーバーロードすることを目的としています。一方の関数は const 関数で、もう一方の関数は const 関数ではありません。しかし、このコードでは、関数をオーバーロードできないことを示すコンパイル エラーが発生します。

これはなぜ発生しますか?

コンパイラは、const キーワードが存在するにもかかわらず、どの関数を呼び出すかを明確にすることができません。議論。値によって渡される場合、引数の定数に関係なく値がコピーされます。したがって、引数の const は、関数定義自体の中でのみ関連します。

その結果、コンパイラは、引数の定数だけに基づいて、どのバージョンの foo 関数を呼び出すかを決定できません。

以上がC で非ポインター/非参照引数の定数に基づいて関数をオーバーロードできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。