【问题标题】:Const keyword in function with an *& argument.函数中带有 *& 参数的 const 关键字。
【发布时间】:2015-06-14 17:05:10
【问题描述】:

你能在下面的代码中解释一下原因吗:

    #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*’

谢谢!

【问题讨论】:

    标签: c++ constants pass-by-reference


    【解决方案1】:

    txt 的类型为 char[100]。它必须转换为char * 才能传递给fun;这种转换产生一个右值。您不能从右值创建非常量引用。

    为了说明,考虑一下如果 fun 被定义如下会发生什么:

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

    下面的代码会做什么(假设它可以编译)?

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

    【讨论】:

    • 好的。所以右值只能分配给 const & 类型,对吧(或分配给 const 或非 const && 类型)?您的问题的答案:它会使 txt 指向表中的下一个字符:“olokwium”。但这与我的问题有什么关系?
    • @hungry91:因为那是不可能的。你不能修改数组变量(即你不能做char txt[100]="..."; txt++;)。
    • @hung txt 不是指针,它是一个数组。您可以将其隐式转换为指向第一个元素的指针,但这不是一回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多