簡體   English   中英

c ++模板中的隱式類型轉換

[英]Implicit type conversion in c++ template

我有一個功能模板:

template<typename T>
void fun(T a, T b){
         .......
}

int a = 0;
double b = 1.2;
f(a, b);

可以自動轉換為雙倍?

可以自動轉換為雙倍?

不,因為在fun<int>fun<double> ,當在模板參數推斷中推導出T的類型時,它是不明確的。

你可以顯式地指定模板參數,使a隱式轉換為double

int a = 0;
double b = 1.2;
fun<double>(a, b); 

或添加顯式轉換,以使模板參數推斷明確:

int a = 0;
double b = 1.2;
fun(static_cast<double>(a), b); 

不,它不能。 在模板扣除過程中沒有完成轉換。 在這種情況下,我們從ab獨立地推導出T ,得到ab int和為b得到的double - 因為我們推導出T是兩種不同的類型,即推導失敗。

如果你想做轉換,最簡單的事情就是自己明確地做:

f(static_cast<double>(a), b);

或者明確地將模板參數提供給f以便不進行演繹:

f<double>(a, b);

如果您的意圖是將參數a轉換為參數b類型,則可以使用以下模板而不是您的模板:

template<typename Ta, typename T>
void fun(Ta aTa, T b) {
    T& a = static_cast<T>(aTa);
    /* ... a and b have the same type T ... */
}

int a = 0;
double b = 1.2;
fun(a, b);    // works fine

暫無
暫無

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

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