【问题标题】:Clarification on `this` keyword澄清 `this` 关键字
【发布时间】:2012-12-07 16:48:10
【问题描述】:

对不起,如果这是一个琐碎的问题:

实施 1:

class Foo
{
    protected: int bar;

    public: Foo(int bar)
      {
        this->bar =bar;
      }
};

实施 2:

class Foo
{
    protected: int bar;

    public: Foo(int bar)
      {
        this.bar =bar;
      }
};

实施 2 的输出:

request for member ‘x’ in ‘this’, which is of pointer type ‘Foo* const’ (maybe you meant to use ‘->’ ?)

所以this是一个指针,而this问题在代码中有语法错误

【问题讨论】:

  • 这是基本的东西——(原始)指针只能用于->,不能用于.
  • 仅供参考 - C++C# 是 2 种不同的语言。
  • 我来自 Java。 @user93353 的翻译中丢失了一些东西,代码标记为 C++ && C#。我的坏虽然
  • @aiao:我已经从链接的问题中删除了 C++ 标签,因为代码显然不是 C++

标签: c++ pointers this


【解决方案1】:

您所指的问题包含用 C# 而不是 C++ 编写的代码示例。是的,在 C++ 中,this 是一个指针,必须取消引用才能访问它指向的对象的任何成员。

【讨论】:

  • 很抱歉它被标记为 c++,所以假设它们是相同的。谢谢
  • 其实这也是 C# 中的一个指针,但是 C# 有一种自动取消引用 :)
  • @BlackBear 谢谢,我不懂任何 C#。我认为我的编辑现在对 C# 没有任何建议。
  • @BlackBear:不,这不是“一种自动取消引用”。 Java 和 C# 中的 . 运算符就是您在这些语言中编写 C++ -> 运算符的简单方法。不同的语言写他们的操作符不同。
  • @newacct 在 C# 中,您将点运算符用于结构(值类型)和类(引用类型)。如果将点应用于结构,则它等效于 C++ 的点,而如果将其应用于类,则它实际上作为 C++ 的箭头运行。
猜你喜欢
  • 2011-07-22
  • 2011-04-05
  • 2012-11-09
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2019-11-18
  • 2012-03-27
相关资源
最近更新 更多