m******t 发帖数: 4077 | 1 一个linked list实现的stack
myStack ss;
ss.push('c');
ss.push('a');
cout <
这样输出的结果是 ca
myStack ss;
ss.push('c');
ss.push('a');
char s1 = ss.pop();
char s2 = ss.pop();
cout <
这样就对了,输出的结果是 ac
请问问题出在哪里?谢谢。 |
o***g 发帖数: 2784 | 2 猜是<<的运算顺序的问题
【在 m******t 的大作中提到】 : 一个linked list实现的stack : myStack ss; : ss.push('c'); : ss.push('a'); : cout <: 这样输出的结果是 ca : myStack ss; : ss.push('c'); : ss.push('a'); : char s1 = ss.pop();
|
p***e 发帖数: 183 | 3 Operators in C++ are implemented as function calls.
cout << ss.pop() << ... |
r*******y 发帖数: 290 | 4 我怎么记得STL里面stack的函数原型是:
void pop();
void push(const T&);
const T& top() const;
T& top();
【在 m******t 的大作中提到】 : 一个linked list实现的stack : myStack ss; : ss.push('c'); : ss.push('a'); : cout <: 这样输出的结果是 ca : myStack ss; : ss.push('c'); : ss.push('a'); : char s1 = ss.pop();
|
m**o 发帖数: 56 | 5 nod,lz多半是自己编的
【在 r*******y 的大作中提到】 : 我怎么记得STL里面stack的函数原型是: : void pop(); : void push(const T&); : const T& top() const; : T& top();
|
m******t 发帖数: 4077 | 6 我是自己写的。用引用应该更合适。谢谢指出。
【在 r*******y 的大作中提到】 : 我怎么记得STL里面stack的函数原型是: : void pop(); : void push(const T&); : const T& top() const; : T& top();
|
f*******y 发帖数: 988 | 7 不是引用的问题,是pop和top要分开,主要是exception的问题
【在 m******t 的大作中提到】 : 我是自己写的。用引用应该更合适。谢谢指出。
|
y**c 发帖数: 6307 | 8 int a(0);
cout<<(a+=1)<<" "<<(a+=2)<
我得到的结果是
3 2
按照书上的说法,cout<
(cout.operator<<(a)).operator<<(b)
所以我也比较迷惑了。 |
e*a 发帖数: 32 | 9 this is undefined....
【在 y**c 的大作中提到】 : int a(0); : cout<<(a+=1)<<" "<<(a+=2)<: 我得到的结果是 : 3 2 : 按照书上的说法,cout<: (cout.operator<<(a)).operator<<(b) : 所以我也比较迷惑了。
|
X****r 发帖数: 3557 | 10 C++里一个重要的概念是序列点(sequence point),当程序运行到一个序列点的时候,
之前的所有副作用都已完成而之后的任何副作用尚未开始。两个相邻的序列点之间的
副作用发生的顺序不一定。同一个变量在两个相邻的序列点之间最多只能被修改一次。
C++标准的1.8里给出了序列点的详细定义并列举了所有的序列点。函数调用之前有
一个序列点,是在函数的所有参数都计算完毕之后而在函数体执行之前。至于函数
参数之间,包括成员函数所对应的对象的计算,它们的先后顺序都是不确定的。
比如f(a,g(b,c));如果a,b,c都是表达式的话,那它们的计算顺序是不确定的。
改换一下形式就是你的例子了。
【在 y**c 的大作中提到】 : int a(0); : cout<<(a+=1)<<" "<<(a+=2)<: 我得到的结果是 : 3 2 : 按照书上的说法,cout<: (cout.operator<<(a)).operator<<(b) : 所以我也比较迷惑了。
|
y**c 发帖数: 6307 | 11 谢谢。:)
候,
【在 X****r 的大作中提到】 : C++里一个重要的概念是序列点(sequence point),当程序运行到一个序列点的时候, : 之前的所有副作用都已完成而之后的任何副作用尚未开始。两个相邻的序列点之间的 : 副作用发生的顺序不一定。同一个变量在两个相邻的序列点之间最多只能被修改一次。 : C++标准的1.8里给出了序列点的详细定义并列举了所有的序列点。函数调用之前有 : 一个序列点,是在函数的所有参数都计算完毕之后而在函数体执行之前。至于函数 : 参数之间,包括成员函数所对应的对象的计算,它们的先后顺序都是不确定的。 : 比如f(a,g(b,c));如果a,b,c都是表达式的话,那它们的计算顺序是不确定的。 : 改换一下形式就是你的例子了。
|