为什么在引用指针时将const放在与号的左侧,而在右边却无效?

问题描述 投票:0回答:2

我想知道为什么这一行被认为是有效的:

Entity* const & e = this; 

但是此行不是:

Entity* & const e = this;

&符在这里实际做什么?为什么将const放在它的左边有效而不在右边?顺便说一句,这些行是称为Entity的类的构造函数的一部分。

c++ pointers reference this
2个回答
1
投票

Entity* const & e = this;是“对指向Entity的const指针的引用”。

Entity* & const e = this;将是“对指向实体的指针的常量引用”,但引用不能为const 1,因此会出现错误。


1-创建引用后,您将无法“重新绑定”引用以使其指向另一个对象。因此,有人认为引用“始终是const”,但是严格地说,这是不正确的。 std::is_const返回false供参考。


0
投票

this指针的声明如下:

Entity * const this

这意味着它是指向当前对象的指针,该指针本身的值无法修改(即,this指向的地址无法修改)。

在第一个示例中,您声明了一个名为e的变量,它是对实体(const)指针的reference,即对与实体的(不变)(指针)的引用。 this

的类型

在第二个示例中,您声明对实体指针的引用,其中此实际指针may的值/地址会更改。此处的[[const关键字不是指定指针地址的状态,而是指定引用本身不会改变,即不会引用新的Entity *。

从技术上讲,第二个示例中的const是多余的,因为所有引用都是隐式const,即,如果我们像这样向第一个示例中添加const:

Entity* const & const e = this;

它实际上根本不会改变含义。

希望这有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.