返回C+中的结构值+; 当我研究C++中的const引用类型时, 我学习了返回引用类型在主函数中使用局部变量, 所以我测试了返回的正常结构类型如何在左值中工作。所以我希望这个源代码不会编译, 但它编译得很好…:( 所以我有两个问题

返回C+中的结构值+; 当我研究C++中的const引用类型时, 我学习了返回引用类型在主函数中使用局部变量, 所以我测试了返回的正常结构类型如何在左值中工作。所以我希望这个源代码不会编译, 但它编译得很好…:( 所以我有两个问题,c++,C++,返回的是结构变量吗?为什么这段代码编译得很好 “如果返回的结构不是变量,为什么要编译此代码?”我假设返回值是右值..” #包括 #包括 使用名称空间std; 结构行程时间 { 整小时; int-min; }; 旅行时间总和(旅行时间,旅行时间); 内部主(空) { 行程时间p1,p2,和; cin>>p1.hour>>p1.min; cin>>p2.hour>>p2.min; 总和=总和时间(p1,p2); 库特 返回的是结构变量吗?为什么这段代码编译得很好 这没有多大意义 travel\u t

返回的是结构变量吗?为什么这段代码编译得很好

“如果返回的结构不是变量,为什么要编译此代码?”我假设返回值是右值..”

#包括
#包括
使用名称空间std;
结构行程时间
{
整小时;
int-min;
};
旅行时间总和(旅行时间,旅行时间);
内部主(空)
{
行程时间p1,p2,和;
cin>>p1.hour>>p1.min;
cin>>p2.hour>>p2.min;
总和=总和时间(p1,p2);
库特
返回的是结构变量吗?为什么这段代码编译得很好

这没有多大意义

travel\u time sum;
是一个变量。当调用
sumTime
时,返回此变量的一个副本,而该副本本身不是一个变量。因此答案是否定的,调用函数的结果不是一个变量

我有一种感觉,您真正想问的是,调用函数的结果是否是左值-不是,结果是右值(更具体地说,是prvalue)

若返回的结构不是变量,为什么要编译此代码?我假设返回值是右值

这同样没有意义,除非我用“左值”替换“变量”

<>在C++中,可以赋值给类类型的rValk(但不是用于优先类型,如<代码> int >代码>)。注意,StuttTaveStime是一个类,尽管使用“Stult”这个词。严格来说,C++中没有结构,只有类。


有很多方法可以防止类中出现此类赋值,但您没有这样做。

为什么returend struct可以在lavalue中使用?:(即使这不是引用类型,您所说的“变量”是什么意思?在您的问题“是返回的结构变量吗?”这是否回答了您的问题?@HanjoungLee对,以及
sumTime(t1,t2)小时=0;将不能编译在C++中。Stutt赋值编译为:<代码> SUMTENT(P1,P2)。运算符=(P1);< /代码>。谢谢您的明确回答!我认为我应该更多地研究C++中的R值,特别是C和C++之间的差异。
#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;
}