[英]Passing const pointers to const by reference in functions
我正在玩一些數組並通過引用函數來傳遞指針。 以以下代碼為例:
#include<iostream>
void test_fn(const int* const &i){
std::cout<<*i<<std::endl;
}
int main(){
int arr_1[5] {1, 3, 6, 4, 5};
int *int_ptr1 {nullptr};
int_ptr1=arr_1;
test_fn(int_ptr1);
return 0;
}
此代碼運行正常。
但是,如果我將test_fn
的定義修改為:
void test_fn(const int* &i){
std::cout<<*i<<std::endl;
}
我收到以下錯誤:
無法將“const int*&”類型的非常量左值引用綁定到“const int*”類型的右值
我的問題是:為什么這在第二個示例中是一個問題,而在第一個示例中沒有,唯一的區別是指針作為 const 指針傳遞?
在第二個例子中,該函數引用了一個非常量const int*
指針,但你給它一個int*
指針。 因為指針是非常量的,所以引用不能綁定到由編譯器創建的臨時const int*
變量以隱式地從int*
轉換為const int*
。 該引用在調用站點需要一個非常量 const const int*
變量,因此您必須將int_ptr1
顯式聲明為const int*
而不是int*
:
const int *int_ptr1 = arr_1;
在第一個示例中,該函數引用了一個const const int*
指針。 由於指針是 const,編譯器可以隱式地從int*
轉換為const int*
並將結果存儲在一個臨時變量中,然后將引用綁定到該臨時變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.