奇怪的标准::C++中的字符串流行为
Weird std::stringstream behaviour in C++
这是代码:
std::string Query_Set::get_sql() const throw()
{
std::stringstream out;
int counter = 0;
out << "WHERE " << time_name << " >= :start_time_" << counter++ << " AND " << time_name << " <= :finish_time_" << counter++ " AND something_else = :" << counter++;
return out.str();
}
这段代码非常简单,但是当我打印出这个字符串时,它做了一些奇怪的事情:
"WHERE time >= :start_time_2 AND time <= :finish_time_1 AND something_else = :0"
我错过了一些简单的东西吗?为什么计数器会倒退?
表达式
参数的计算顺序在C++中未定义。第二个counter++
可能发生在第一个之前。我什至在Clang和GCC中看到了这种表达的不同行为。