为什么我是否调用函数 "foo" 会导致结果不同?

Why does it make a difference in the result whether I call the function "foo" or not?

我尝试了 运行 调用函数“foo”和不调用函数“foo”的代码,结果不同。我以为因为函数是空的,所以它不会对结果产生影响,但显然我错了。

#include <iostream>
using namespace std;
#include <string>

class Product
{
    private:
        float price;
    public:
    static float total;
    Product(float p){
      price = p;
      total+=price;
    }
    Product(Product &pr){
      price = pr.price;
      total+=price;
    }
        
};

float Product::total = 0;

void foo(Product &pr1 , Product pr2){};


int main(){
    Product p1(5.2) , p2(2.6);
  Product p3(p1);
  cout << Product::total << endl;
  foo(p1 , p2);
  cout << Product::total << endl;
}

调用值 ‍‍‍foo = 13

没有调用的值foo = 15.6

因为调用 foo(p1, p2); 导致创建 p2 的副本,调用 Product 复制构造函数并添加到 total。这是因为 void foo(Product&, Product) 按值获取其第二个参数。