c++ - 在 C++ 中返回结构值
问题描述
当我在 C++ 中学习 const 引用类型时,我学习了返回引用类型在主函数中使用局部变量,所以我测试了返回的正常结构类型如何在左值中工作。所以我预计这个源代码不会编译,但它编译得很好...... :(所以我有两个问题
“是返回的结构变量吗?为什么这段代码编译得很好?”
“如果返回的结构不是变量,为什么编译这段代码?,我假设返回值是右值..”
#include<iostream>
#include<cstring>
using namespace std;
struct travel_time
{
int hour;
int min;
};
travel_time sumTime(travel_time, travel_time);
int main(void)
{
travel_time p1, p2,sum;
cin >> p1.hour >> p1.min;
cin >> p2.hour >> p2.min;
sum=sumTime(p1, p2);
cout << sum.hour << "hour " << sum.min<<"min";
sumTime(p1, p2) = p1; //********** why it works? **********
return 0;
}
travel_time sumTime(travel_time t1, travel_time t2)
{
travel_time sum;
sum.hour = t1.hour + t2.hour+(t1.min+t2.min)/60;
sum.min = (t1.min + t2.min) % 60;
return sum;
}
解决方案
是返回结构变量吗?为什么这段代码编译得很好?
这没有多大意义。
travel_time sum;
是一个变量。当您调用 时sumTime
,您会返回此变量的副本,而该副本本身不是变量。所以答案是否定的,调用函数的结果不是变量。
我有一种感觉,你真正想问的是调用函数的结果是否是左值 - 不是,结果是右值(更具体地说,prvalue)。
如果返回的结构不是变量,为什么编译这段代码?,我假设返回的值是右值..
这又没有任何意义,除非我用“左值”替换“变量”。
在 C++ 中,您可以分配给类类型的右值(但不能分配给私有类型,例如int
)。请注意,这struct travel_time
是一个类,尽管使用了“结构”一词。严格来说,C++ 中没有结构,只有类。
有一些方法可以防止为您的班级分配此类作业,但您没有这样做。
推荐阅读
- android - android studio log errr Places API for Android 似乎没有为您的应用启用。它打开和关闭
- javascript - 如何在 Javascript 迭代器中查看下一个值
- java - JavaFX BorderPane 布局(拉伸左右窗格)
- asp.net-core - 使用 Kudu 构建服务部署 asp.net 核心应用程序时出现 UnauthorizedAccessException
- python - 最短距离两指打字问题的动态规划解
- java - 是否可以将子类的实例分配给超类的变量?
- python - 预期 float32,得到
我正在尝试构建一个函数来执行损失优化,我正在使用 Adam 优化器,其学习率将在课程本身中传递。但是,我被建议使用 clip_by_norm 函数应用剪裁来消除爆炸梯度。
def perform_
- c# - 在 foreach 循环之前检查员工姓名是否在列表中
- node.js - Google App Engine:为 React Production Build 设置环境变量
- python - 将 y 轴标签格式化为具有许多零的更高千位科学记数法?