流中的执行顺序

时间:2016-07-10 15:33:34

标签: c++ std

今天我写了一个包装类来进行数据库查询。我的想法是从std :: stringstream继承,以便能够编写如下内容:

Statement st;
st << "SELECT name FROM user WHERE email LIKE " << st.prep("john") << ";";
st.exec();

在测试时我意识到prep函数的执行顺序因使用的编译器而异。 看看这个简单的片段:

#include <sstream>
#include <iostream>

unsigned nr = 0;

std::string prep() {
    std::stringstream s;
    s << nr++;
    return s.str();
}

int main(int argc, char** argv) {
    std::cout << prep() << " " << prep() << " " << prep() << "\n";
    return 0;
}

你可以认为输出将是“0 1 2”,是的,如果用icc或clang ++编译,它的行为就像那样。但是当用g ++编译时,我的输出是“2 1 0”。

有没有办法确保提升执行顺序?

0 个答案:

没有答案