2015-06-14 57 views
1

能否請您解釋一下爲什麼下面的代碼:使用*&參數對函數進行Const關鍵字。

#include <iostream> 
    void fun(char * const & x){(*x)++;} 
    int main(){ 
     char txt[100]="kolokwium"; 
     fun(txt); 
     std::cout << txt <<"\n"; 
    } 

需要對代碼const關鍵字來編譯?

如果我刪除它,我得到:

invalid initialization of non-const reference of type ‘char*&’ from an rvalue of type ‘char*’ 

的感謝!

回答

5

txt的類型是char[100]。它必須轉換爲char *才能傳遞到fun;此轉換會產生一個右值。你不能從右值創建一個非const引用。

爲了說明,考慮如下如果fun被定義會發生什麼:

void fun(char *&x) { x++; } 

什麼將下面的代碼做(假設它可以編譯)?

char txt[100]="kolokwium"; 
fun(txt);      // Huh? 
+0

好吧。所以rvalues只能分配給const&types,right(或者const或nonconst &&類型)?你的問題的答案:這將使txt指向表中的下一個字符:「 olokwium」。但是,這與我的問題有什麼關係? – hungry91

+0

@ hungry91:因爲這是不可能的。你不能修改一個數組變量(即你不能'char txt [100] =「...」; txt ++;')。 –

+0

@hung'txt'不是一個指針,它是一個數組。你可以將它轉換爲隱式指向第一個元素的指針,但這不是一回事。 – Yakk