sách gpt4 ăn đã đi

c++ - Cho rằng b luôn khác 0, tại sao `b ? --b :++b` hoạt động nhưng `--b` thì không?

In lại Tác giả: IT Lão Cao 更新时间:2023-10-28 22:20:30 29 4
mua khóa gpt4 giày nike

我试图使用递归将两个整数相乘,并意外编写了这段代码:

//the original version
int multiply(int a, int b)
{
if ( !b )
trả về 0;
khác
return a + multiply(a, b ? --b : ++b ); //accident
}

我说,我不小心写了这个,因为我打算写:

b > 0 ? --b :++b thay vì b ? --b :++b

我意识到我打算写的 wouldn't work .但令我惊讶的是,我所做的KHÔNG打算写does work .

现在,我注意到 b ?--b :++b 基本上等同于 --b bởi vì b 在 else- block 保证非零。于是我修改了上面的代码,把b?--b:++b换成--b,如下图:

//the modified version
int multiply(int a, int b)
{
if ( !b )
trả về 0;
khác
return a + multiply(a, --b); //modification here
}

由于原始版本可以正常工作,我希望修改后的版本也能正常工作。但是,令我惊讶的是,它 doesn't work!

  • 修改后的版本有什么问题?
  • 不等同于原版吗?
  • --b 是否不等于 b ?--b :++b NẾU NHƯ b 非零?如果它是等价的,那么为什么第一个代码有效而第二个代码无效?

注意:这里的“工作”是指它给出了正确的输出。也就是说,它给出了传递给函数的整数的乘法

câu trả lời hay nhất

它不起作用。我不知道ideone在冒什么烟,那代码会溢出堆栈。

biên tập

在 gcc 4.6.0 上尝试过 - 段错误(由于堆栈溢出)。但是,如果您启用 -O2 优化,那么确实“它有效”。总而言之:它的工作是偶然的,取决于编译器在幕后做了什么。

g++ -g -Wall -o f f.cpp # stack overflow
g++ -O2 -g -Wall -o f f.cpp # "works"

关于c++ - 鉴于 b 始终非零,为什么 `b ? --b :++b` 有效,但 `--b` 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386601/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress