yohhoyの日記

技術的メモをしていきたい日記

signatureの定義

プログラミング言語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

*1:メンバ関数に対するconst/volatile修飾

*2:メンバ関数に対する&または&&修飾