c – 在operator <<中执行的顺序

c – 在operator <<中执行的顺序,第1张

概述我很难理解下面代码中的调用顺序. 我期待看到下面的输出 A1B2 虽然我可以看到我得到的输出是 BA12 我以为调用std :: cout<< b-> fooA()<< b-> fooB()<< std :: endl等同于调用 std::cout.operator<<( b->fooA() ).operator<< ( b->fooB() ) 但我可以看到情况并非如此.你能帮助我更好地理解它是如 我很难理解下面代码中的调用顺序.
我期待看到下面的输出

A1B2

虽然我可以看到我得到的输出是

BA12

我以为调用std :: cout<< b-> fooA()<< b-> fooB()<< std :: endl等同于调用

std::cout.operator<<( b->fooA() ).operator<< ( b->fooB() )

但我可以看到情况并非如此.你能帮助我更好地理解它是如何工作的以及与全球 *** 作符的关系<<?这是最后一次调用这个序列吗? 问候 AFAG

#include <iostream>    struct cbase{        int fooA(){            std::cout<<"A";            return 1;        }        int fooB(){            std::cout <<"B";            return 2;        }    };    voID printcbase(cbase* b ){        std::cout << b->fooA() << b->fooB() << std::endl;    }    int main(){        cbase b;        printcbase( &b );    }
解决方法 编译器可以像这样评估printcbase()函数:

voID printcbase(cbase* b ){    int a = b->FooA();    // line 1    int b = b->FooB();    // line 2    std::cout << a;       // line 3    std::cout << b;       // line 4    stc::cout << std::endl;}

或者标记为1 – 4的许多线条的一些.只保证第1行在第3行之前完成,第2行在第4行之前完成(当然第4行在第4行之前).标准没有说更多,实际上你可以期望使用不同的C编译器得到不同的结果.

总结

以上是内存溢出为你收集整理的c – 在operator <<中执行的顺序全部内容,希望文章能够帮你解决c – 在operator <<中执行的顺序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1209816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存