[英]In C++ if a member function is virtual when can static binding be used?
[英]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.