在C ++中,我们可以定义和重载运算符以使代码更美观。但是,当需要从定义它的类中调用运算符时,语法不那么优雅。
例如,考虑operator[]
上string
的典型用法:
std::string word("Hello!");
char first = word[0];
简单。但是,如果这样的运算符需要从一些本身定义它的类中调用呢?语法不是很漂亮:
(*this)[i];//option 1
operator[](i);//option 2
this->operator[](i);//option 3
在性能和/或行为方面,三者之间有什么区别,特别是在处理继承或多态时?哪个是正确的,明确的语法?
答案 0 :(得分:6)
三者在可读性和性能方面有何区别?
无论您使用哪种形式,性能都不应有差异。
至于可读性,这是一个意见问题。我更愿意使用
(*this)[i];
但如果有人使用其他形式之一,我不会抱怨。
"正确"调用运算符的方式?
一切都是正确的 - 语法和语义。