可能重复:
List of C++ name resolution (and overloading) rules函数重载在C++
什么是编译器如何决定哪些功能要在C++的规则? (这是给定的两个函数具有相同的名称 - 编译器如何选择/优先考虑另一个函数,主要是想知道编译器选择何种类型的编译器时更愿意执行)
可能重复:
List of C++ name resolution (and overloading) rules函数重载在C++
什么是编译器如何决定哪些功能要在C++的规则? (这是给定的两个函数具有相同的名称 - 编译器如何选择/优先考虑另一个函数,主要是想知道编译器选择何种类型的编译器时更愿意执行)
如前所述,规范在标准中有完整的描述。作为一个基本的经验法则,编译器将选择需要最少自动转换的重载,但要注意的是它永远不会应用2个用户定义的转换。
整数类型会自动转换很多。因此,如果您的函数在int
和double
上超载,则编译将选择int
函数(如果使用一个整数常量调用)。如果您没有int
版本,编译器会选择double
之一。在各种整数类型中,编译器更喜欢整数常量为int
,因为这是它们的类型。如果您在short
和unsigned short
上超载,但调用常量为5
,则编译器会抱怨说无法确定要使用哪个超载。
Scott Meyers的书确实有我读过的最好的解释。
你的意思是压倒一切吗? – MGZero
规则很多...并且很复杂。所有这些都在C++标准的** 3.4 **部分中涵盖了。 –
@MGZero - no ... – Belgi