我的教授让我找到c ++中的哪些运算符不能超载,原因是什么。我发现点(。),范围分辨率(::),条件(?:),sizeof()运算符不能重载。任何人都可以告诉我原因吗?
答案 0 :(得分:0)
struct Troll
{
int money = 0;
int problems = 0;
float cant_touch_this = 0.0;
int& operator.(const std::string& member_name)
{
if (member_name == "money")
return problems;
else if (member_name == "problems")
return money;
else if (member_name == "cant_touch_this")
throw cant_touch_this;
else
throw 0;
}
};
int main()
{
Troll t;
t.money = 42;
t.problems = 3;
}
在编写上面的片段绝对不能编译时,我问自己多个问题:
operator.
返回类型应该是什么?这就是为什么你不能重载点(。)运算符的原因,并且你会通过尝试重载不可重载的运算符来问自己类似的问题。
聪明的头脑可能会找到这些问题的正确答案,但这种思想要么不是天生的,要么不是c ++委员会的成员,不是标准功能提案的粉丝,或者根本不关心,因为他没有&# 39;不需要这个功能。