【问题标题】:'this' for structs?'this' 用于结构?
【发布时间】:2012-06-26 19:52:48
【问题描述】:

一个简短的,也许是愚蠢的问题。 对于类和结构,有时我喜欢使用与构造函数参数同名的成员变量。例如:

class Vector3
{
    float x, y, z;

    public Vector3(float x, float y, float z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}

基本上,我也想对结构执行此操作,但您不能在结构构造函数中使用“this”(我认为它们的用途是为类保留的)。有没有办法做到这一点,还是我应该给我的论点换个名字?

【问题讨论】:

  • thisstructclass 一样有效。两者其实差别很小。但请记住 this 是一个指针。
  • FredLarson 说了什么,但唯一的区别是结构成员默认是公共的,类成员默认是私有的。
  • @AlexWilson:是的,这就是我所说的“非常小的”差异,而不是没有差异。 8v)
  • 这个例子看起来更像java而不是c++
  • 为了它的价值,最好不要这样做。我无法计算我必须修复的错误数量,因为有人忘记了 this-> 或认为他们正在使用被另一个变量隐藏的变量。

标签: c++ constructor struct this


【解决方案1】:

你可以使用它,但它是一个指针,就像在类中一样:

this->x = x;

顺便说一句,structclass 除了默认的访问说明符之外的所有内容都完全相同。

【讨论】:

  • 嗯,我习惯了 C#,在这里你使用 this.members。我怀疑我错过了一些非常基本的东西。感谢所有的答案!
  • 为了记录,通常我自己会想出这样的事情,但这是我没有太多时间做的任务,所以我想问起来更快。
【解决方案2】:

你真正应该做的是使用构造函数的初始化列表:

class Vector3
{
    float x, y, z;

  public:
     Vector3(float x, float y, float z) : x(x), y(y), z(z) {}

};

但是关于您对在结构中使用 this 的疑虑,与类没有区别。

我想补充一点,确实值得为数据成员制定某种命名约定,以避免混淆。收藏夹往往是尾随下划线或前导 m_

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多