[英]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.