gpt4 book ai didi

c++ cout 使用自定义 Stack 类的奇怪行为

转载 作者:太空狗 更新时间:2023-10-29 20:00:45 25 4
gpt4 key购买 nike

我有一个自定义堆栈类。大部分代码可以在这里看到:
Member functions of a templated class, that take a template type as argument

我像这样填充堆栈:

stack <int> Astack;
Astack.Push(1); Astack.Push(2); Astack.Push(3); Astack.Push(4);

然后我这样做:

cout << Astack.Pop() << Astack.Pop() << Astack.Pop() << Astack.Pop() <<endl;

得到这个:1234
但是,如果我这样做:

cout << Astack.Pop(); cout << Astack.Pop(); cout << Astack.Pop(); cout << Astack.Pop();

我明白了:4321,这显然是我想要的。

那么,是什么给了?

最佳答案

函数调用的评估顺序未指定。您的第一个表达式基本上可以归结为:

cout << a << b << c << d;

abcd 都是对 Astack.Pop 的调用()。编译器可以生成代码,以它选择的任何顺序评估这些调用。

您应该避免编写依赖于表达式各部分的特定计算顺序的表达式。一般来说,它不安全(即使安全,通常也很困惑)。

关于c++ cout 使用自定义 Stack 类的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5150544/

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