gpt4 book ai didi

c++ - 了解运营商

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:40 24 4
gpt4 key购买 nike

我们的教授给了我们一个练习测试和答案,以帮助我们进行即将到来的测试。我不明白这段代码的答案是 135

我明白类是什么,但我对运算符的工作方式感到困惑。对于 v{6},我理解对于对象 vint v 等于 13。我认为在 int main 中, (-v - v).print 中的第一个 -v 将首先在返回 2 * v 的运算符中进行评估 并且它将返回 26。然后我想他们会被放在最后一个运算符中

V operator-(int lop, const V& rop)
{
return rop - lop;
}

但我认为情况并非如此。我已将此代码放入 Visual Studio 中进行处理,但我不明白发生了什么。

#include <iostream>
using namespace std;

class V
{
int v;

public:
V(int a = 3, int b = 7) : v{a + b}
{
}

void print()
{
cout << v;
}

V operator-(const V& rop) const
{
return (3 * v) + (2 * rop.v) + 3;
}

V operator-()
{
return 2 * v;
}
};

V operator-(int lop, const V& rop)
{
return rop - lop;
}

int main()
{
V v{6};
(-v - v).print();

return 0;
}

最佳答案

哇,这是令人困惑的代码,有重复使用的变量名、奇怪的非常规操作等等。代码特别难理解,因为 V可以从一个整数隐式构造,并且总是将 7 添加到该整数;即使使用调试器,我也花了一些时间才理解。请永远不要写这样的代码,即使是为了好玩!

-v 的结果在main不是 int .这是一个V从表达式 2 * v 隐式构造的对象(=26),得到一个值为 33 (26+7) 的成员整数。

就好像你写的一样:

V operator-()
{
return V(2 * v);
}

或者,由于默认参数:

V operator-()
{
return V(2 * v, 7);
}

然后你把这个新返回的对象提供给成员 operator-(const V&) ;同样的故事也适用。它产生表达式 3*33 + 2*13 + 3 , 即 128;这再次用于构建一个新的 V (因为这是返回类型!),所以加 7 得到 135。

operator-(int lop, const V& rop)不会进入它,因为你从未在 int 之间执行减法和一个 V .

关于c++ - 了解运营商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56058075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com