簡體   English   中英

在函數中通過引用將 const 指針傳遞給 const

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

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