元武 发表于 2021-7-13 11:01:28

c++里pow函数中的后置递增++失灵


各位前辈好。
我想请问下
c++
int a = 1
pow(a++,2)的结果与pow(a,2)的结果一样,都是1.
既没有如同pow(++a,2)的结果:先(1+1)再^2
也没有先1^2再加1
为什么?

人造人 发表于 2021-7-13 11:29:39

$ cat main.cpp
#include <iostream>
#include <cmath>

int main() {
    {
      int a = 1;
      double d = pow(a++, 2);
      std::cout << d << std::endl;
    }
    {
      int a = 2;
      double d = pow(a++, 2);
      std::cout << d << std::endl;
    }
    return 0;
}
$ g++ -g -Wall -o main main.cpp
$ ./main
1
4
$

y星空y 发表于 2021-7-13 12:09:28

人造人 发表于 2021-7-13 11:29


不是自增的++失效,而是a++和++a作为参数时,参数是传值的,a++是先将自己的值传给函数pow然后自增函数接收的参数值为1,而++a是先自增再传值,函数接收的参数值为2。结果当然不一样。在C/C++中函数的参数一般是传值,除非你用引用或者指针的方式进行传入。

元武 发表于 2021-7-13 12:09:55

人造人 发表于 2021-7-13 11:29


你好。我的答案与你的一致。但可能误会了我的问题。我想问的是为什么是1和4,而不是2和5。++后置递增不是要+1吗

人造人 发表于 2021-7-13 12:13:23

元武 发表于 2021-7-13 12:09
你好。我的答案与你的一致。但可能误会了我的问题。我想问的是为什么是1和4,而不是2和5。++后置递增不是 ...

后 ++,先使用值,然后再加
a++是先将自己的值传给函数pow,然后自增,函数接收的参数值为1
页: [1]
查看完整版本: c++里pow函数中的后置递增++失灵