Effective C++ 条款26: 当心潜在的二义性
2011-09-15 22:10
295 查看
#include <iostream> using namespace std; void f(char c) { cout << c <<endl; } void f(int i) { cout << i <<endl; } int main() { double d = 2.0; f(d); return 0; }
上述代码中f(d)调用会产生二义性。
重载解析的步骤:
1、确定函数调用考虑的重载函数的集合,确定函数调用中的实参属性。
2、从重载函数集合中选择的函数,该函数可以在(给出实参个数和类型)的情况下用调用中指定的实参进行调用。
3、选择与调用最匹配的函数。
在我们 给的实参和重载函数类型不是精确匹配时,而是要通过一定的数据类型转换来得到则要准寻下列原则:
1、应用在实参上的转换不比调用其他可行函数所需的转换差。
2、在某些实参上的转换要比其他可行函数对该函数的对该参数的转换好。
ps:精确匹配比标准抓换好(不转换比任何转换好)。c++ primer 383 有详细说明。
因为上面例子中我们在执行f(d);的时候,有两个候选函数。而且在通过数据类型转换从而得到匹配函数时,出现二义性。
相关文章推荐
- effective c++ 条款26: 当心潜在的二义性
- 条款26: 当心潜在的二义性
- effective C++笔记之条款26:当心潜在的二义性
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- Effective C++——条款26(第5章)
- effective C++ 条款26 to 条款31
- effective C++ 条款 26:尽可能延后变量定义式的出现时间
- 《Effective C++》之条款26:尽可能延后变量定义式的出现时间
- Effective C++:条款26:尽可能延后变量定义式的出现时间
- Effective C++ 条款26
- 《Effective C++》条款26 防卫潜伏的ambiguity模棱两可的状态
- Effective C++ 第二版 25)避免指针和数字重载 26)二义性
- Effective C++ 条款26 尽可能延后变量定义式的出现时间
- 《Effective C++》资源管理:条款26-条款27
- effective c++ 条款26 postpone variable definition as long as possible
- 《Effective C++ 3》05 实现 条款:26-31
- Effective C++(条款26-31)
- Effective C++ -----条款26:尽可能延后变量定义式的出现时间
- Effective C++ 条款26:尽可能延后变量定义式的出现时间
- 《Effective C++》学习笔记——条款26