戻り値の型は関数シグネチャに含まれていますか?また戻り値の型の変更のみによるオーバーロードは許可されていますか?
C では区別があります関数宣言と関数エンティティの間。宣言では、関数エンティティまたはテンプレート エンティティを確立できます。非テンプレート関数宣言の場合、署名には引数の型、クラス メンバーシップ情報 (該当する場合)、および修飾子が含まれます。ただし、関数テンプレートの特殊化の場合、シグネチャには戻り値の型も含まれます。
関数の特殊化の関数シグネチャ
標準 C では、関数テンプレートの特殊化の場合、シグネチャには次のことが規定されています。セクション14.5.5.1で強調表示されている戻り値の型。これには、テンプレートの署名と提供されたテンプレート引数が含まれます。これは、戻り値の型が関数の型に影響するという理解と一致しています。
区別された戻り値の型によるオーバーロード
標準によれば、関数宣言は次のようになります。さまざまな戻り値の型は、オーバーロードの観点から区別されるものとみなされます (セクション 13.1)。ただし、「戻り値の型によってのみ異なる」という定義は、言語では未指定のままです。
コンパイラーの動作
現在、主要なコンパイラーは、同一のシグネチャを持つが異なる関数宣言を拒否します。戻り値の型 (例: "int f();"、"double f();")。ただし、この動作は必ずしも標準によって義務付けられているわけではありません。
C 0x ドラフト提案
最近の C 0x ドラフト仕様では、「署名」のより包括的な定義が提供されています。セクション 1.3.11 には、関数エンティティとテンプレート特殊化の両方の戻り値の型が明示的に含まれています。これは、戻り値の型が関数の型の不可欠な部分を形成するという主張と一致します。
したがって、要約すると次のようになります。
以上がC 関数のオーバーロードでは戻り値の型の違いのみが許容されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。