参考指针类型

时间:2012-07-25 07:04:15

标签: c++ arrays pointers reference pass-by-reference

#include <iostream>

using namespace std;
int main(void)
{
    int num[5];
    const int* &ref = num;

    return 0;
}

我读过一本C ++书,其中提到参考变量是否引用:

  1. 类型不同但可以转换的变量。
  2. 不是左值的变量。
  3. 只要引用变量声明为const,上述两种情况将通过使用一种方法来解决,其中编译器将创建一个存储,并且该值将被放入其中,而引用的标识符变量被视为该特定存储位置的标识符。以下是演示代码。

    情况1
    #include <iostream>
    
    using namespace std;
    int main(void)
    {
        int num = 5;
        const long long &ref = num; //the value 5 is place in a new storage where ref is the identifier
    
        return 0;
    }
    
    案例2:
    #include <iostream>
    
    using namespace std;
    int main(void)
    {
        int num = 5;
        const int &ref = num + 1; //expression num + 1 evaluated and store in new storage with identifier ref
    
        return 0;
    }
    

    由于这2个案例有效,为什么 The Code:中的案例无效?

    我的逻辑是因为使用时数组的名称将转换为指向数组第一个元素的指针,因此编译器应该发现这不是左值,并且将创建一个新存储来存储该地址当然,引用变量名称将被视为该位置的标识符。

    注意:我知道这有点偏离主题,但我可以知道阵列名称是否为左值?只是一个简单的是或否会做,因为将代码更改为int &ref = num我认为它不是左值,但我只需要进一步确认。

    谢谢。

1 个答案:

答案 0 :(得分:4)

您引用的变量是而不是声明为const。

const int *int * const之间存在差异,您选错了。

您的示例(ii)因同样的原因无效,应为const int &ref = num + 1;

对于你的笔记,我不确定一个简单的是或否会做。一个简单的数组名称​​是一个左值,指的是数组。但是,在大多数情况下,它会衰减到指向第一个元素的指针,这是一个右值指针。