簡體   English   中英

C ++中的函數靜態綁定

[英]function static binding in C++

我問的是C ++中函數的靜態綁定。 函數綁定的數據類型轉換規則是什么?

假設我們有

void func(int x);
void func(long x);
void func(float x);
void func(double x);
void func(char x);

我主要有一個功能

func(1)

我知道函數func(int x)將被調用。 我對此感到好奇。

它總是最合適的嗎?

聲明的順序重要嗎?

在任何情況下都將應用數據類型轉換?

設計規則時要關注什么?

它總是最合適的嗎?

是: 1是一個int 如果存在適當的重載, 則會采取這種做法,因為這樣可以最大程度地減少必需的隱式轉換的次數(無)。

聲明的順序重要嗎?

否。但是,在調用之前是否已聲明函數很重要。 如果在調用之后聲明了該函數,則對於重載解析將不考慮該函數。

在任何情況下都將應用數據類型轉換?

這里沒有轉換,因為int是完全匹配的。 只有在沒有完全匹配的情況下,轉化才會起作用。

設計規則時要關注什么?

好吧,這是唯一有意義的規則,不是嗎?

常數1具有int類型,因此最佳匹配為void func(int) 聲明的順序不受影響。 當存在最佳匹配(無歧義)但匹配項和參數與參數的類型不同時,類型轉換將起作用。

在C ++中,始終是最佳匹配。 聲明順序無關緊要。 是的,常量具有類型轉換。 例如,如果您編寫另一個重載:

void func(std::string const& x);

然后致電:

func("Hi there");

然后,編譯器將使用func(std::string const& x)重載作為std::string包含采用char const *構造char const *並將其用作類型轉換規則之一。 然后將構造臨時std :: string並將其傳遞給func。

有類型常量,例如, unsigned 1 1u以及long 1 1l ,以及帶有double( 1.0 )和float( 1.0f )的常量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM