當實參對應過載函式的多個可行函式,且每個可行函式各自在乙個實參上實現了更好的匹配時,編譯器會因為程式具有二義性而報錯。
例如:
#include
using std:
:string;
using std:
:cout;
using std:
:cin;
using std:
:endl;
voidff(
int,
int)
voidff(
double
,double
=3.14
)int
main()
此時編譯器會報告有多個過載函式「ff」的例項與引數列表匹配。
可知這種函式過載方式本身不是特別合理。
但是如果我們非要使用這種具有二義性的實參該怎麼辦呢?
可以通過函式指標來指向想要呼叫的函式,能夠避免二義性的產生。
#include
using std:
:string;
using std:
:cout;
using std:
:cin;
using std:
:endl;
voidff(
int,
int)
voidff(
double
,double
=3.14
)int
main()
雖然可以通過函式指標來避免這個問題,但是防止此類問題出現的最好方法還在於對過載函式形參的良好設計上。 C 函式過載二義性
說起函式過載,我不由得想起了c 的 多型 特性。多型又分為靜態 編譯時 多型和動態 執行時 多型,靜態多型即為函式過載,動態多型則是虛函式機制。虛函式水較深,先不討論,今天我們來看一下函式過載 作用以及要避免的一些坑 尤其是二義性錯誤 一 先來review一下 函式過載的概念 1.函式名相同 2.形...
C 函式過載二義性
說起函式過載,我不由得想起了c 的 多型 特性。多型又分為靜態 編譯時 多型和動態 執行時 多型,靜態多型即為函式過載,動態多型則是虛函式機制。虛函式水較深,先不討論,今天我們來看一下函式過載 作用以及要避免的一些坑 尤其是二義性錯誤 一 先來review一下 函式過載的概念 1.函式名相同 2.形...
函式的二義性
connect ui spinbox luminosity,qspinbox valuechanged,ui horizontalslider luminosity,qslider setvalue 執行上面語句,提示如下錯誤。connect 採用的是 qt 5 的語法,問題原因是函式 valuec...