隱式型別轉換導致過載函式二義性的問題:
舉例說明:
int foo(int nx)
std::cout << nx << std::endl;
int foo (float fx)
std::cout << fx << std::endl;
int main(void)
int a = 3;
float b = 3.0;
foo( a ); // 輸出 3
foo( b ); // 輸出 3.0
foo( 3 ); // 輸出 3
foo( 1.5 ); // error!!! ambiguous value, 因為自動型別轉換
foo( int(1.5) ); // 輸出 1
foo( float(1.5) ); // 輸出 1.5
第乙個foo函式引數型別是 int 型;
第二個foo函式引數型別是 float 型;
第三個foo函式引數型別是 int 型;
第四個foo函式引數型別,不確定,因為數字本沒有型別,將數字當做引數時會自動型別轉換(即隱式型別轉換);
此時,編譯器不知道把1.5轉換成 int 還是 float型別的引數。
第五個foo函式引數型別是 float 型;
第六個foo函式引數型別是 int 型;
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...