gpt4 book ai didi

c++ - operator << 中的执行顺序

转载 作者:可可西里 更新时间:2023-11-01 15:49:22 28 4
gpt4 key购买 nike

我很难理解下面代码中的调用顺序。我期待看到下面的输出

    A1B2

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

    BA12

我认为调用std::cout<< b->fooA() << b->fooB() << std::endl相当于调用

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

但我可以看出情况并非如此。你能帮我更好地理解它是如何工作的以及与全局 operator<< 的关系吗? ?这是最后一次调用此序列吗?

#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 行之前完成(当然还有第 3 行在第 4 行之前)。标准并没有多说,实际上您可以预期不同的 C++ 编译器会产生不同的结果。

关于c++ - operator << 中的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14809978/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com