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

aya*_*ane 2 c++ syntax operator-overloading this

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

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

std::string word("Hello!");
char first = word[0];
Run Code Online (Sandbox Code Playgroud)

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

(*this)[i];//option 1
operator[](i);//option 2
this->operator[](i);//option 3
Run Code Online (Sandbox Code Playgroud)

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

R S*_*ahu 6

在可读性和性能方面,三者有什么区别?

无论您使用哪种形式,性能都不应有任何区别.

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

(*this)[i];
Run Code Online (Sandbox Code Playgroud)

但如果有人使用其他表格,我不会抱怨.

调用运算符的"正确"方法是什么?

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

  • 如果我需要在单个函数中的多个位置使用它,那么首先我要这样做:`auto&self =*this;`(cv-qualified as per semantic)然后每次使用`self [i]`需要它. (2认同)