声明指向*this*对象的指针的优点或理由是什么?
What is the advantage or reason to declare a pointer to *this* object?
声明指向这个对象的指针的优点或理由是什么?
假设一个对象有一个私有变量"x"
我经常看到这样的代码:
class_name<T> &ma = *this;
ma.x = 1;
不是this->x = 1;
或者更简单的
x = 1;
当您的类的基类是模板类时,this
指针对于引用基类的任何成员都是强制性的。这就是为什么在这种情况下可能出现前两个版本,而第三个版本会出错的原因。
前两个版本是相同的(在他们被固定之后-见下文),只是在个人风格上有所区别。
class_name<T>& ma = *this;
ma.x = 1;
ma.y = 2;
和
this->x = 1;
this->y = 2;
正如@chris指出的,你的第二个版本有一个编译错误,在你的第一个版本中,如果你不使用&
, 涉及到一个拷贝,这意味着它正在做一些非常不同的(可能错误),因为这些变化不会影响当前对象,而是一个局部变量,它将在作用域结束时被销毁。
在不涉及模板基类的一般情况下,
x=1;
节拍。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 不允许功能模板的部分专业化背后的理由是什么?
- 这个错误是什么?似乎没有理由出现
- typeid 运算符忽略 cv 限定符背后的理由是什么?
- 对于类型是类模板专业化的参数,ADL背后的理由是什么
- 当编译器看到 std::vector<Typo> 和 std::vector<struct 拼写错误时发出的诊断之间的差异背后的理由是什么>
- "inline function need to be DEFINED in all tranlation units"背后的理由是什么?
- 延长临时工的使用寿命的理由是什么
- 允许“?”被转义的理由是什么?
- 保留 std::initializer_list 的副本是否安全?理由是什么
- "no diagnostic required"的理由是什么?
- 将所有引用形参设为const的理由是什么?
- 将monotonic_clock重命名为 steady_clock 的理由是什么<chrono>?
- 这种未定义行为的理由是什么
- 不允许绑定到初始化列表中的引用的临时存在于actor结束之后的理由是什么?
- 声明指向*this*对象的指针的优点或理由是什么?