【问题标题】:C++: String member alias in methodC++:方法中的字符串成员别名
【发布时间】:2014-03-08 00:20:40
【问题描述】:

我的构造函数:

bnf::bnf(string encoded)
{
    this->encoded = encoded;
}

将字符串数据复制到成员。 (或者它..?)

我将有一个递归解码方法,但想避免一直写this->encoded

如何有效且简单地在方法中创建对成员的别名/引用?

最好避免开销吗?

【问题讨论】:

  • 向下投票者在堆栈溢出中是如此之快!我必须承认,这令人印象深刻。

标签: c++ string reference class-method class-members


【解决方案1】:

你可以只传入一个不同的命名参数。这是假设 encoded 是您的 bnf 类的私有字符串成员

bnf::bnf(string en)
{
    encoded = en;
}

在你的其他函数中,如果你不想写this,你仍然不需要:

void bnf::printCode(){
     cout << encoded << endl;
}

假设您的班级如下所示:

class bnf{
    public:
         bnf(string en};
         void printCode();
         //<some other functions>
    private:
         string encoded;
}

【讨论】:

  • 完整地说,如果在构造函数中使用初始化列表,您可以使用相同的名称。
  • 我知道我可以。这不是我的意思。我的意思是,以不同的方法,我如何enc = this-&gt;encoded 而不复制数据?并维护会员的状态?
  • 我不确定你在问什么。 enc = this-&gt;encoded 不复制数据是什么意思?
  • @stakSmashr 我的意思是我只想让enc 代表会员,只是为了避免一直写this :-)。但是当我再次考虑时,这是糟糕的编码..
  • @Dror 编码不错,只是风格不同。不使用this 指针并没有错。您始终可以在不使用 this 的情况下单独引用类的私有成员变量
【解决方案2】:

你现在所做的并没有错。它富有表现力,清晰而正确。不要试图破坏它。

如果您担心使用 this 指针的“开销”,请不要:它已经尽可能高效了。实际上没有办法让它更快。

如果你的问题有点错误,而你只想在成员函数中提及一个成员变量,那么:

struct MyClass
{
   int x;
   void myFunction();
};

void MyClass::myFunction()
{
   this->x = 4;
}

函数相当于:

void MyClass::myFunction()
{
   x = 4;
}

【讨论】:

  • 我不是这个意思。但我认为你的第一句话是对的。 (坚持this-&gt;encoded
  • 我所说的开销是关于是否在递归方法的开头明确创建对它的引用。
  • @Dror:不知道你的意思。但是,无论您是否创建引用,您都必须访问该成员,并且通过this 指针与任何其他方法一样好。如果可以优化,你的编译器会优化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
相关资源
最近更新 更多