隱式型別轉換導致過載函式二義性的問題

2021-08-17 01:52:55 字數 733 閱讀 6479

隱式型別轉換導致過載函式二義性的問題:

舉例說明:

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...