プログラミング言語C++における関数シグネチャ(signature)の定義についてメモ。
2021-09-27追記:C++20以降の関数シグネチャ定義は signatureの定義 @ C++20 を参照のこと。
まとめ:
- 関数:名前、引数型リスト、所属する名前空間(戻り値型は除外)
- 関数テンプレート:名前、引数型リスト、戻り値型、所属する名前空間、テンプレートパラメータリスト
- メンバ関数:名前、引数型リスト、所属するクラス+cv修飾*1+参照修飾*2(戻り値型は除外)
- メンバ関数テンプレート:名前、引数型リスト、戻り値型、所属するクラス+cv修飾+参照修飾、テンプレートパラメータリスト
C++03
C++03 1.3.10より引用。
signature
the information about a function that participates in overload resolution (13.3): the types of its parameters and, if the function is a class member, the cv-qualifiers (if any) on the function itself and the class in which the member function is declared.2) The signature of a function template specialization includes the types of its template arguments (14.5.5.1).脚注2) Function signatures do not include return type, because that does not participate in overload resolution.
C++11/14
C++11 1.3.17-22より引用。C++14も同一定義。
〈function〉 name, parameter type list (8.3.5), and enclosing namespace (if any)
[Note: Signatures are used as a basis for name mangling and linking. -- end note]〈function template〉 name, parameter type list (8.3.5), enclosing namespace (if any), return type, and template parameter list
〈function template specialization〉 signature of the template of which it is a specialization and its template arguments (whether explicitly specified or deduced)
〈class member function〉 name, parameter type list (8.3.5), class of which the function is a member, cv-qualifiers (if any), and ref-qualifier (if any)
〈class member function template〉 name, parameter type list (8.3.5), class of which the function is a member, cv-qualifiers (if any), ref-qualifier (if any), return type, and template parameter list
〈class member function template specialization〉 signature of the member function template of which it is a specialization and its template arguments (whether explicitly specified or deduced)
関連URL