【发布时间】:2021-02-21 08:04:17
【问题描述】:
当我学习 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;
}
【问题讨论】:
-
为什么return struct可以在lavalue中使用? :(
-
即使那不是引用类型????
-
“变量”是什么意思?在你的问题“返回的结构变量?”
-
这能回答你的问题吗? Function returning struct as LValue
-
@HanjoungLee 对,
sumTime(t1, t2).hour = 0;也将无法在 C++ 中编译。结构赋值编译,因为它转换为sumTime(p1, p2).operator=(p1);。
标签: c++