奇怪的标准::C++中的字符串流行为

Weird std::stringstream behaviour in C++

本文关键字:字符串 流行 C++ 标准      更新时间:2023-10-16

这是代码:

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中看到了这种表达的不同行为。