使用此代码:
int main()
{
try
{
throw -1;
}
catch (int& x)
{
std::cerr << "We caught an int exception with value: " << x << std::endl;
}
std::cout << "Continuing on our merry way." << std::endl;
return 0;
}
我们有:
/tmp$ ./prorgam.out
Continuing on our merry way
We caught an int exception with value: -1
catch
块如何读-1
为int&
?我们无法将值分配给非常量左值引用。
为什么第二条std::cout
语句要在第一条std::cerr
语句之前执行?
@Scheff,对不起,您是对的,第一个输出重定向到
—
Ghasem Ramezani
error stream
not standard stream
。
@FrançoisAndrieux被允许的原因是发生了不同的语义。通常,对于临时文件,您不知道会发生什么情况,因此决定只允许const引用临时文件。除例外外,我们知道对象的生存期,我们可能需要对其进行修改并将其重新扔到更高的上下文中。为了促进这一点,该标准允许绑定到非常量左值引用。
—
NathanOliver
@FrançoisAndrieux
—
HolyBlackCat
throw
创建一个副本(或移动)您传递给它的对象。引用绑定到该副本。副本是左值是有意义的。
We caught an int exception with value: -1
行应首先打印。