考虑以下代码:
#include <iostream>
class Test
{
public:
Test() : a{ 0 }
{}
void print() const
{
std::cout << "a : " << a << std::endl;
}
void operator->()
{
a = 5;
}
void operator++()
{
++a;
}
public:
int a;
};
int main()
{
Test a;
a.print();
// Increment operator
a.operator++(); // CORRECT
++a; // CORRECT
a.print();
// Indirection operator
a.operator->(); // CORRECT
a->; // INCORRECT
a.print();
}
为什么第二个
->
操作符的调用是不正确的?我知道这种使用方法与一般用法不同,但这种用法是否被标准禁止?
a.operator->()
是一个函数调用,而a->
是(*a).
的语法糖。 - Marco A.a->;
是语法错误。操作符重载不能创建新的语法,它只是为现有的语法提供不同的行为。 - M.M