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->encoded
而不复制数据?并维护会员的状态?
我不确定你在问什么。 enc = this->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->encoded
)
我所说的开销是关于是否在递归方法的开头明确创建对它的引用。
@Dror:不知道你的意思。但是,无论您是否创建引用,您都必须访问该成员,并且通过this
指针与任何其他方法一样好。如果可以优化,你的编译器会优化它。以上是关于C++:方法中的字符串成员别名的主要内容,如果未能解决你的问题,请参考以下文章
C++快速上手string的使用,刨析string常用成员函数,体验到C++的快乐。
当引入参数时,从指针调用成员函数的 C++ 调用内存访问冲突