首页 > 解决方案 > 为什么无论我是否调用函数“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;
}

调用 ‍‍‍<code>foo = 13 的值

没有调用的值foo = 15.6

标签: c++static

解决方案


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


推荐阅读