【C++學習】cout對象<<輸出語句中調用了函數,此函數中也有輸出,會怎么顯示?


在閱讀C++prime中P233也示例代碼中有一個問題:

cout對象使用 << 操作符輸出的語句中調用了某函數,然后此函數中也有輸出,會怎么顯示?

第一種寫法:

在主函數中的cout對象使用重載操作符 << 並沒有結束,所以輸出流中的內容並沒有顯示在屏幕上。

然后在cout 語句中調用了use()函數,在該函數中會創建一個新的cout對象,然后輸出函數中的內容顯示在屏幕上。

然后函數調用結束后又回到了主函數中的cout語句中,當該語句執行完畢之后,輸出流中的內容就會顯示到屏幕中,也就有了控制台顯示的結果。

(我的理解,不知道對不對)

 1 #include <iostream>
 2 using namespace std;
 3 
 4 struct sysop
 5 {
 6     char name[26];
 7     char quote[64];
 8     int used;
 9 };
10 const sysop & use(sysop & sysopref);
11 int main()
12 {
13     sysop looper =
14     {
15         "Rick \"Rortran\" Looper",
16         "I'm a goto kind of guy.",
17         0
18     };
19     use(looper);
20     //cout << "Looper: " << looper.used << "use(s).\n";
21     sysop copycat;
22     copycat = use(looper);
23     //cout << "Looper: " << looper.used << "use(s).\n";
24     //cout << "copycat: " << copycat.used << "use(s).\n";
25     cout << "use(looper): " << use(looper).used << "use(s)\n"; 26     return 0; 
27 }
28 const sysop & use(sysop & sysopref)
29 {
30     cout << sysopref.name << " says: \n" << sysopref.quote << endl;
31     sysopref.used++;
32     return sysopref;
33 }
34 /*
35 Rick "Rortran" Looper says:
36 I'm a goto kind of guy.
37 Rick "Rortran" Looper says:
38 I'm a goto kind of guy.
39 Rick "Rortran" Looper says: //先輸出被調用函數中的內容
40 I'm a goto kind of guy.
41 use(looper): 3use(s)  //再顯示主函數中輸出語句內容
42 */

第二種寫法:

在主函數中的cout對象使用重載操作符 << ,然后輸出流中的內容 use(looper): 顯示在屏幕上。

然后下一個cout 語句中調用了use()函數,在該函數中會創建一個新的cout對象,然后輸出函數中的內容顯示在屏幕上。

然后函數調用結束后又回到了主函數中的cout語句中,這里會輸出 一個沒有名字的引用變量(但是引用的是looper變量)的used屬性 3。

然后再執行下一個語句,也就有了控制台顯示的結果。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 struct sysop
 5 {
 6     char name[26];
 7     char quote[64];
 8     int used;
 9 };
10 const sysop & use(sysop & sysopref);
11 int main()
12 {
13     sysop looper =
14     {
15         "Rick \"Rortran\" Looper",
16         "I'm a goto kind of guy.",
17         0
18     };
19     use(looper);
20     //cout << "Looper: " << looper.used << "use(s).\n";
21     sysop copycat;
22     copycat = use(looper);
23     //cout << "Looper: " << looper.used << "use(s).\n";
24     //cout << "copycat: " << copycat.used << "use(s).\n";
25     cout << "use(looper): "; 26     cout << use(looper).used; 27     cout << "use(s)\n"; 28     return 0;
29 }
30 const sysop & use(sysop & sysopref)
31 {
32     cout << sysopref.name << " says: \n" << sysopref.quote << endl;
33     sysopref.used++;
34     return sysopref;
35 }
36 
37 /*
38 Rick "Rortran" Looper says:
39 I'm a goto kind of guy.
40 Rick "Rortran" Looper says:
41 I'm a goto kind of guy.
42 use(looper): Rick "Rortran" Looper says:
43 I'm a goto kind of guy.
44 3use(s)
45 */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM