【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 */

 

原文链接: https://www.cnblogs.com/tristatl/p/12882440.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    【C++学习】cout对象<<输出语句中调用了函数,此函数中也有输出,会怎么显示?

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/348152

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午4:54
下一篇 2023年3月2日 上午4:55

相关推荐