c++ - 为什么无论我是否调用函数“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
解决方案
因为调用foo(p1, p2);
会导致创建副本p2
,所以调用Product
复制构造函数并添加到total
. 这是因为void foo(Product&, Product)
它的第二个参数是按值取值的。
推荐阅读
- google-cloud-platform - 如何检查 GKE 中使用的启动磁盘大小消耗?
- django-rest-framework - Api 在 open edx 的讨论论坛中创建帖子
- triggers - 如何为同一个对象创建两个触发器
- java - 如何将主体对象构建到集成测试中
- python - KNN with scikit-learn:如何使用 NaN 欧几里得度量获得距离矩阵?
- css - 如何在带有标签的 css 中创建缺口边框?
- amazon-web-services - Lambda 中的 AWS create_multipart_upload
- r - 在R中更改数据框中的日期值
- sql - 从未创建的 oracle 表中选择,并且在数据库中未创建类型
- gatling - Gatling:仅当循环中的一个调用失败时打印到文件