C++ 为什么“const int&;k=i++;i、 `可能的

C++ 为什么“const int&;k=i++;i、 `可能的,c++,syntax,reference,constants,C++,Syntax,Reference,Constants,我应该确定此函数在语法上是否正确: intf3(inti,intj){const int&k=i;++i;return k;} 我已经对它进行了测试,并使用我的主函数进行了编译 我不明白为什么会这样 当然,通过调用函数f3我在一个新的内存空间中创建变量I和j的副本,并设置const int&k=I我正在将新创建的k的内存空间设置为与复制的I的内存空间完全相同的空间,因此任何更改,即,增量++i将导致++k,这是不可能的,因为它被设置为const 非常感谢您的帮助 增量++i将导致++k,这是不可

我应该确定此函数在语法上是否正确:

intf3(inti,intj){const int&k=i;++i;return k;}

我已经对它进行了测试,并使用我的主函数进行了编译

我不明白为什么会这样

当然,通过调用函数
f3
我在一个新的内存空间中创建变量
I
j
的副本,并设置
const int&k=I
我正在将新创建的
k
的内存空间设置为与复制的
I
的内存空间完全相同的空间,因此任何更改,即,增量
++i
将导致
++k
,这是不可能的,因为它被设置为
const

非常感谢您的帮助

增量
++i
将导致
++k
,这是不可能的,因为它已设置为
常量

那是个误会

您不能通过
k
更改对象的值,但仍可通过其他方式更改。换句话说,不允许使用
++k
,但仍然允许使用
++i
,这将间接修改
k
的值

这是一个来自非计算机世界的类比

你可以透过商店的窗户看到里面有什么,但是你无法改变商店里面的东西。但是,商店内的员工可以更改商店的内容。你会从中看到这种变化
外面。您拥有对门店的
const
访问权限或查看权限,而员工拥有对门店的非
const
访问权限或更改访问权限。

不太牵强。这是一个很好的类比,注意这是因为我本身不是常数。所以我们有一个常量引用,一个非常量对象。常量对象是不同的。@DavidSchwartz这是真的,但现在我想起来了,它不适合指针的逻辑,是吗?既然
int*const
将是指向常量int的非常量指针,
int*const
将是指向非常量int的常量指针,这应该是
int&const
,不是吗?我觉得这是不一致的。小的挑剔:
intf3(inti,intj){const int&k=I;++k;return k;}
在语法上是正确的too@danielspaniol我得到
错误:无法将const限定类型为'const int&'的变量'k'赋值
@ThomasSablik,这是一个语义错误。语法正确。
我正在设置新创建的k的内存空间
。不,K是一个引用,这意味着它相当于一个别名(别名实际上是变量的另一个名称)。因此
k
不需要它自己的变量,它只是
i
的另一个名称(尽管它是const限定的)。您可以验证它没有自己的内存,因为您无法获取
k
的地址,如果您尝试,您将获得
i
@MartinYork的地址如果您将
int&k
放入结构
a
,将其作为第一个字段,获取结构的地址,并将其从
A*
转换为
int**
:您将获得
int&k
的地址。