cout 从右到左输出
最近又重新开始学c++了,才逐渐认识到c++的强大,原来自己一直都是一个小菜鸟。今天在学find这个泛型算法的时候,又遇到了一个有趣的问题,故写下来了。
先贴上代码吧
#include<iostream> #include<string> #include<list> #include<algorithm> #include<iterator> #include<string> using namespace std; template <typename InputItera, typename T > inline InputItera find(InputItera first, InputItera last, const T& value) { while (first != last && *first != value) { ++first; } return first; } int main(void) { int a[10] = {12, 3, 25, 7, 11, 213, 7, 123, 29, -31}; int *ptr = ::find(&a[0], &a[10], 7); cout << "Test array" << endl; cout << *ptr << ' ' << *(ptr + 1) << endl; list<int> list1(&a[0], &a[10]); list<int>::iterator ptr1 = ::find(list1.begin(), list1.end(), 7); cout << "Test list" << endl; cout << *ptr1 << ‘ ‘ << *(++ptr1) << endl; return 0; }
输出的结果是:
Test array
7 11
Test list
11 11
原本以为第二个输出的和第一个是一样的7和11,但是实际结果却不是这样的。
这个问题也很简单,就是cout的机制是从右至左输出的,所以执行的先后顺序就是:先执行++ptr1然后输出*ptr1,最后在输出*ptr1。