C++ 对指针类型的引用 案例2:

C++ 对指针类型的引用 案例2:,c++,arrays,pointers,reference,pass-by-reference,C++,Arrays,Pointers,Reference,Pass By Reference,既然这两个案例是有效的,那么代码中的案例怎么会是无效的呢 我的逻辑是,当使用数组时,数组的名称将转换为指向数组第一个元素的指针,因此编译器应该已经发现这不是左值,并且将创建一个新的存储来存储该地址,当然,引用变量名称将作为该位置的标识符 注意:我知道这有点离题,但我可以知道数组名是否为左值吗?只需简单的是或否即可,因为将代码更改为int&ref=num我假设它不是左值,但我需要进一步确认 谢谢。您的引用变量未声明为常量 常量int*和int*const之间存在差异,您选择了错误的一个 由于同样的

既然这两个案例是有效的,那么代码中的案例怎么会是无效的呢

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

注意:我知道这有点离题,但我可以知道数组名是否为左值吗?只需简单的是或否即可,因为将代码更改为int&ref=num我假设它不是左值,但我需要进一步确认

谢谢。

您的引用变量未声明为常量

常量int*和int*const之间存在差异,您选择了错误的一个

由于同样的原因,示例ii无效,它应该是const int&ref=num+1

请注意,我不确定简单的“是”或“否”就行了。简单数组名是一个左值,指数组。但是,在大多数上下文中,它会衰减为指向第一个元素的指针,这是一个右值指针。

您引用的变量不是声明为常量的

常量int*和int*const之间存在差异,您选择了错误的一个

由于同样的原因,示例ii无效,它应该是const int&ref=num+1


请注意,我不确定简单的“是”或“否”就行了。简单数组名是一个左值,指数组。但是,在大多数情况下,它会衰减为指向第一个元素的指针,这是一个右值指针。

很抱歉输入错误,我刚刚编辑了案例i和案例i。阅读您的答案后,我想我找到了解决方案和我犯的错误。const int*和int*const确实不同。很抱歉输入错误,我刚刚编辑了案例i和案例i const。在阅读了您的答案后,我想我找到了解决方案和我犯的错误。常量int*和int*const确实是不同的。请在发布另一个问题之前查看我的编辑。您应该学习使用标记编辑器。在你的帖子中几乎没有必要使用HTML。学习markdown并请停止发布类似以下内容的brtual html:请停止使用代码和问题标题。我们可以知道哪些部分是代码,哪些部分是问题所在。我们依靠你文章中的标记和语言来了解你在问什么,乱扔粗体的标题只是把事情弄得乱七八糟。请,请在你发布另一个问题之前查看我的编辑。您应该学习使用标记编辑器。在你的帖子中几乎没有必要使用HTML。学习markdown并请停止发布类似以下内容的brtual html:请停止使用代码和问题标题。我们可以知道哪些部分是代码,哪些部分是问题所在。我们依靠你文章中的标记和语言来理解你的问题,在文章周围乱扔粗体的标题会把事情弄得一团糟。
#include <iostream>

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

    return 0;
}
#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;
}
#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;
}