• 【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).
    ";
    21     sysop copycat;
    22     copycat = use(looper);
    23     //cout << "Looper: " << looper.used << "use(s).
    ";
    24     //cout << "copycat: " << copycat.used << "use(s).
    ";
    25     cout << "use(looper): " << use(looper).used << "use(s)
    ";
    26     return 0; 
    27 }
    28 const sysop & use(sysop & sysopref)
    29 {
    30     cout << sysopref.name << " says: 
    " << 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).
    ";
    21     sysop copycat;
    22     copycat = use(looper);
    23     //cout << "Looper: " << looper.used << "use(s).
    ";
    24     //cout << "copycat: " << copycat.used << "use(s).
    ";
    25     cout << "use(looper): ";
    26     cout << use(looper).used;
    27     cout << "use(s)
    ";
    28     return 0;
    29 }
    30 const sysop & use(sysop & sysopref)
    31 {
    32     cout << sysopref.name << " says: 
    " << 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 */
  • 相关阅读:
    第一篇:spring+springMVC项目启动最终笔记(一web.xml)
    Mysql优化系列之查询性能优化前篇1
    Mysql优化系列之索引性能
    java设计模式系列1-- 概述
    操作系统-死锁(重要)
    Mysql优化系列之表设计规范和优化
    Mysql优化系列之数据类型优化
    git-常见问题解决
    使用 jenkins 搭建CI/CD流水线 (MAC)
    jenkins 异常
  • 原文地址:https://www.cnblogs.com/tristatl/p/12882440.html
Copyright © 2020-2023  润新知