簡體   English   中英

傳遞const int *和int *時會調用不同版本的重載函數(const int * const&/ &&)

[英]A different version of an overloaded function(const int* const&/&&) gets called when passing const int* and int*

我遇到了一個錯誤,我的代碼中調用了錯誤的重載函數。

問題歸結為:

void func(const int* const& ptr){
    std::cout << "LValue reference\n";
}
void func(const int* const&& ptr){
    std::cout << "RValue reference\n";
}

int main(){
    const int* ptr;

    func(ptr);

    return 0;
}

上面的代碼按預期工作,它打印LValue reference 但是,當我將const int* ptr更改為int* ptr ,程序會打印RValue reference 這對我來說很奇怪,因為我傳遞了一個確認的LValue。 這讓我相信某種隱式轉換正在發生,將其轉變為RValue。 我用godbolt編譯器探測器進行了調查,乍一看,這確認了我的懷疑,但我對匯編一無所知,所以我不能肯定地說。

所以問題是:這里發生了什么?

int*const int*類型不同。 由於它們不是同一類型,因此必須進行轉換,因為您無法將引用綁定到其他類型,因此它被聲明為引用(除了處理派生對象時)。

這意味着int*用於創建臨時的const int* ,這個臨時指針是一個rvalue。 由於它是一個rvalue,因此將選擇rvalue引用過載。

暫無
暫無

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

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