今天我写了一个包装类来进行数据库查询。我的想法是从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”。
有没有办法确保提升执行顺序?