为什么我是否调用函数 "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)
按值获取其第二个参数。
我尝试了 运行 调用函数“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)
按值获取其第二个参数。