【问题标题】:Why was "this" used as a non const deprecated in C++为什么在 C++ 中不推荐使用“this”作为非 const
【发布时间】:2011-09-26 15:25:53
【问题描述】:

为什么在 C++ 中不推荐使用 this? C++ 中的this 指针与Java 中的this 有何不同?

或者是Wikipedia just wrong

早期版本的 C++ 允许更改 this 指针;通过做 因此程序员可以更改方法正在处理的对象。 这个特性最终被弃用了,现在 C++ 中的 this 是 const 。

【问题讨论】:

  • 您可能需要检查 WP 历史记录。我删除了“已弃用”一词,以及指针为 const 的声明。
  • 有趣...您从维基百科引用的措辞不正确。 this 不是 constthis 是一个右值。当我在 Wikipedia 中进入编辑模式时,我已经在那里看到了“[[rvalue]]”(显然有人对其进行了编辑),但主页仍然显示“const”。

标签: c++ this deprecated this-pointer


【解决方案1】:

我相信你的错误在于你如何解释那句话。他们并不是说“此功能已被弃用”。仅仅重新分配this 指针的功能已被弃用。

【讨论】:

  • 但是为什么呢?寻找技术答案
  • @Elpezmuerto:因为重新分配this 指针是没有意义的,这会导致极易出错的代码。 this 应该指向成员函数中的“当前对象实例”,而不是其他任何东西。
【解决方案2】:

根据您的编辑,维基百科的文章措辞不佳。 this 未被弃用,只是允许更改 this 指针的功能已被弃用。关键字this 仍然存在。

来自Stroustrup himself

为什么“this”不是参考?

因为“this”被引入到 C++ 中(实际上是引入到带有类的 C 中) 在添加参考之前。另外,我选择了“this”来关注 Simula 使用,而不是(后来)Smalltalk 使用“self”。

【讨论】:

  • 措辞很好。 OP只是误解了它。
  • 这是解释 OP 误解了什么的唯一答案。 +1。
  • @ereOn:我的哪方面没有?
【解决方案3】:

你误解了这句话。

早期版本的 C++ 允许更改 this 指针;通过这样做,程序员可以更改方法正在处理的对象。此功能最终被弃用,现在 C++ 中的此功能为 const

不推荐使用的是 this — 指针,而不是它指向的对象 — 是可变的。

this 本身仍然非常活跃,类型为prvalue T*。 (GCC 暂时模拟了这一点,在当前的 GCC 4.7.0 中将 this 设为 rvalue T* const。)

【讨论】:

  • 好吧,这篇文章的措辞也很糟糕
  • this const 不只存在于 const 成员函数中吗?
  • @CatPlusPlus:不。指针始终是常量。记住T* constT const*相同。
  • 我的意思是:“在非静态(9.3)成员函数的主体中,关键字this是一个prvalue表达式,其值是调用函数的对象的地址. X类的成员函数中this的类型为X*,如果成员函数声明为const,则this的类型为const X*,如果成员函数声明为volatile,则其类型为this就是volatile X*,如果成员函数声明为const volatile,那么this的类型就是const volatile X*。”
  • 我同意@CatPlusPlus。 thisprvalue。它有一个指针类型,即非类类型,所以它不能是 cv 限定的。 T 的非常量成员函数中this 的类型是T*,而不是T* const。您无法更改它的事实是因为它是 prvalue,而不是因为它不是 const
猜你喜欢
  • 2020-04-01
  • 1970-01-01
  • 2016-02-23
  • 2017-11-04
  • 2011-10-22
  • 2011-04-11
  • 2021-10-12
  • 2012-12-07
相关资源
最近更新 更多