亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

結構體賦值的問題

代碼如下
struct? st1{int? a, b;? float? x, y;}s1, s2;
struct? st2{int? a, b;? float? x, y;}s3, s4;
為什么s1和s3之間不能相互賦值

正在回答

3 回答

當你寫下 s1 = s2 這個語句, s1 的結構成員就被賦值為和 s2 一樣。這個看著很簡單的賦值行為其實并不是想當然的那么簡單,等于號本身并不能自動地幫你作結構體間的賦值。事實上在 C++ 中這稍微有些復雜:

C++ 中 struct 行為幾乎和 class 一致,struct 對象間賦值實際上是執行賦值運算符。

如果你沒有為 struct 重載賦值運算符,那么編譯器會自動生成一個重載函數,其賦值行為就是依次進行成員間賦值。而且這個你 struct 的成員都是可以被賦值的,所以自動生成的重載賦值運算符函數是可以正常工作的。

s1 s2 之間能相互直接用等于號賦值就是因為它們是相同的 struct 類型 st1,編譯器自動幫你重載了賦值運算符,所以你寫下 s1 = s2 時就可以賦值了。


可是 s3 和 s1 的類型不一致。雖然 st1 和 st2 的結構是相同的,但它們被視為是兩個不同的類型。并且你也沒有為它們定義轉型規則(是的,C++中你可以為class定義轉型規則)。所以編譯器并不會幫你自動生成賦值函數,也就無法用等于號賦值。

你的編譯器應該會報“operator= 參數類型不匹配”之類的錯誤。

1 回復 有任何疑惑可以回復我~

我測試了一下,可以相互賦值。下面是代碼,打印結果是 ? 2 ? ?2

#include <iostream>

using namespace std;


struct ?st1{int ?a, b; ?float ?x, y;}s1, s2;

struct ?st2{int ?a, b; ?float ?x, y;}s3, s4;


int main()

{

s1.a = 2;

cout <<s1.a<<endl;

s3.a = s1.a;

cout <<s3.a<<endl;


return 0;

}


0 回復 有任何疑惑可以回復我~

我也不知道...

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之起航篇
  • 參與學習       290962    人
  • 解答問題       817    個

C++亮點盡在其中,本課程是在C語言基礎上的一個延伸,得以升華

進入課程

結構體賦值的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號