2015-06-14 53 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