微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么此C ++数据成员声明中包含与号?

如何解决为什么此C ++数据成员声明中包含与号?

我是一个新手,试图了解开源游戏Simutrans中的一些C ++代码。具体来说,该声明(this header file中的第79行):

class env_t
{
public:
                     <snip>
/// if we are the server,we are at this port
    /// @see network_init_server()
    static const uint16 &server;

上下文告诉我们此行涉及类env_t的公共数据成员。 static关键字告诉我们,env_t类的所有对象都将具有属性 server

服务器的类型为uint16(16位无符号整数),并且为const ant(因此在正常情况下不能覆盖)。 / p>

令我感到困惑的部分是,为什么该成员的姓名开头有一个&符号。我以前只是在按位算术和“运算符的地址”中遇到“&”号。这些用法都不适合这里:没有算术运算,我看不到如何定义服务器作为服务器的地址。难道不是要告诉程序该变量唯一可能的值是变量自己的内存地址吗?这不仅看起来是循环的,而且似乎与程序肯定可以将16位以上的内存地址用于其他目的这一事实并不一致。

由于与号也是搜索运算符,因此很难搜索解释。但是this article在C ++中给出了&符号的七种不同用法,似乎没有一个适合这里。它既不是表达式也不是双“&”号。根据{{​​3}},可以在功能模板中使用与号以指示参数必须为引用类型。但是我的例子是声明一个数据成员,它不是模板,实际上不是任何函数。类型显然是uint16,对吗?那么,“&”号在这里表示什么?

应该注意的是,Simutrans在所有平台都拥有标准库之前已有20多年的历史,因此其代码有时是特殊的。但是我相信更相关的事实是我是C ++的初学者!

解决方法

该符号表示server引用。这与指针有足够的相似性,如果您对它们感到满意,则可以将它们视为非常受限制的指针。如果您对指针不太满意,则引用不是保存其自身数据的变量。相反,它是对另一个变量的引用。此表示法表示server实际上是在其他地方引用数据,很可能在env_t类之外。

通常这样做有两个原因。一个是,如果您更改此值,它将更改所引用的实际变量的值,因此,如果另一段代码查看其值,他们将看到您的更改。反之亦然,如果其他人更改了server引用的变量的值,而您查询了server的值,则会看到他们的更改。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。