在`this`上调用运算符的这些不同方法有什么区别?

时间:2016-12-02 06:49:09

标签: c++ syntax operator-overloading this

在C ++中,我们可以定义和重载运算符以使代码更美观。但是,当需要从定义它的类中调用运算符时,语法不那么优雅。

例如,考虑operator[]string的典型用法:

std::string word("Hello!");
char first = word[0];

简单。但是,如果这样的运算符需要从一些本身定义它的类中调用呢?语法不是很漂亮:

(*this)[i];//option 1
operator[](i);//option 2
this->operator[](i);//option 3

在性能和/或行为方面,三者之间有什么区别,特别是在处理继承或多态时?哪个是正确的,明确的语法?

1 个答案:

答案 0 :(得分:6)

  

三者在可读性和性能方面有何区别?

无论您使用哪种形式,性能都不应有差异。

至于可读性,这是一个意见问题。我更愿意使用

(*this)[i];

但如果有人使用其他形式之一,我不会抱怨。

  

"正确"调用运算符的方式?

一切都是正确的 - 语法和语义。