C++ 重载决议
flowchart TD
AA(["开始"])
A["在相同作用域内寻找同名函数"]
P["排除不可访问的函数"]
B["存在完全相同的函数签名?"]
L["存在多个匹配的函数?"]
D["找不到匹配函数"]
E["二义性错误"]
F["存在数组/函数指针转换?"]
G["存在可以进行提升或隐式转换的函数?"]
H["选择匹配的唯一函数"]
I["存在非 explicit 的转换构造函数?"]
J["存在类型转换运算符?"]
C["是否有const/volatile 修饰符?"]
M["选择最接近的函数"]
N["同时存在有可变参数与不可变参数的函数?"]
O["选择非可变参数的版本"]
Q["存在候选函数?"]
R["排除参数数量不匹配的函数(考虑默认参数)"]
AA-->A-->P-->R-->Q
Q --是--> B --是 --> C
Q--否-->D
B--否-->F
C--否-->L
F--是-->C
F--否-->G
G--是-->C
G--否-->I
I--是-->C
I--否-->J
J--是-->C
J--否-->D
C--是-->M
L--是-->N
L--否-->H
N--否-->E
N--是-->O
M-->L
click G "#custom-footnote"
flowchart TD
subgraph Promotion [提升,优先级高]
direction TB
char --> int
short-->int
bool-->int
float-->double
enum-->int
ll["long long"]
int-->ll
end
flowchart TD
subgraph Conversion [隐式转换 Conversion - 优先级低]
direction TB
int-->double
double-->int
ll2["long long"]
ll2-->int
ui["unsigned int"]
int-->ui
Base*-->Derived*
end
浙公网安备 33010602011771号