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。
原文链接: https://www.cnblogs.com/lutianba/archive/2013/05/15/3080333.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/88632

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午11:43
下一篇 2023年2月9日 下午11:44

相关推荐