C++:方法中的字符串成员别名

Posted

技术标签:

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

我的构造函数:

bnf::bnf(string encoded)

    this->encoded = encoded;

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

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

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

最好避免开销吗?

【问题讨论】:

向下投票者在堆栈溢出中是如此之快!我必须承认,这令人印象深刻。 【参考方案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 指针与任何其他方法一样好。如果可以优化,你的编译器会优化它。

以上是关于C++:方法中的字符串成员别名的主要内容,如果未能解决你的问题,请参考以下文章

C++快速上手string的使用,刨析string常用成员函数,体验到C++的快乐。

是否可以动态检查文本字符串是否是 C++ 中给定类的成员?

当引入参数时,从指针调用成员函数的 C++ 调用内存访问冲突

C++之类之类的其它特性

C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员

将一个int(例如10)分配给c ++中结构中的字符串成员,为啥它编译成功?