簡體   English   中英

返回 C++ 中的結構值

[英]return struct value in C++

當我在 C++ 中研究 const 引用類型時,我了解到返回引用類型使用主 function 中的局部變量,所以我測試了返回的正常結構類型如何在左值中工作。 所以我預計這個源代碼不會編譯,但它編譯得很好...... :(所以我有兩個問題

“是返回的結構變量嗎?為什么這段代碼編譯得很好?”

“如果返回的結構不是變量,為什么編譯這段代碼?,我假設返回值是右值..”

#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時,您會返回此變量的副本,而該副本本身不是變量。 所以答案是否定的,調用 function 的結果不是變量。

我有一種感覺,您真正想問的是,調用 function 的結果是否是左值 - 不是,結果是右值(更具體地說,是右值)。

如果返回的結構不是變量,為什么編譯這段代碼?,我假設返回的值是右值..

這又沒有任何意義,除非我用“左值”替換“變量”。

在 C++ 中,您可以分配給 class 類型的右值(但不能分配給int等私有類型)。 請注意, struct travel_time是 class,盡管使用了“struct”一詞。 嚴格來說,C++ 中沒有結構,只有類。

有一些方法可以防止對您的 class 進行這種分配,但您沒有這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM