我想知道为什么这一行被认为是有效的:
Entity* const & e = this;
但是此行不是:
Entity* & const e = this;
&符在这里实际做什么?为什么将const放在它的左边有效而不在右边?顺便说一句,这些行是称为Entity的类的构造函数的一部分。
Entity* const & e = this;
是“对指向Entity的const指针的引用”。
Entity* & const e = this;
将是“对指向实体的指针的常量引用”,但引用不能为const
1,因此会出现错误。
1-创建引用后,您将无法“重新绑定”引用以使其指向另一个对象。因此,有人认为引用“始终是const”,但是严格地说,这是不正确的。 std::is_const
返回false
供参考。
this
指针的声明如下:
Entity * const this
这意味着它是指向当前对象的指针,该指针本身的值无法修改(即,this
指向的地址无法修改)。
在第一个示例中,您声明了一个名为e的变量,它是对实体(const)指针的reference,即对与实体的(不变)(指针)的引用。 this。
的类型在第二个示例中,您声明对实体指针的引用,其中此实际指针may的值/地址会更改。此处的[[const关键字不是指定指针地址的状态,而是指定引用本身不会改变,即不会引用新的Entity *。
从技术上讲,第二个示例中的const是多余的,因为所有引用都是隐式const,即,如果我们像这样向第一个示例中添加const:Entity* const & const e = this;
它实际上根本不会改变含义。希望这有所帮助!