评估顺序,例外

Mat*_*zak 1 c++ language-lawyer

如果在赋值的rhs上抛出异常,则在下面的表达式中:bad_alloc将linesArg已经减少了吗?:

try{    
  buffer[--linesArg] = new char[rows];
}catch(std::bad_alloc& ba){

}
Run Code Online (Sandbox Code Playgroud)

gex*_*ide 5

分配不是序列点.因此,子表达式的评估顺序是未指定的.编译器可以选择任何订单.每次编译时它甚至可能选择不同的顺序.

您应该将--linesArg表达式提取到其自己的语句中以获得明确定义的行为.