З цим кодом:
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
твердженням?
error stream
не standard stream
.
throw
створює копію (або переміщує) об’єкт, який ви передаєте йому. Посилання пов'язується з цією копією. Це має сенс, що копія є цінністю.
We caught an int exception with value: -1
Лінія повинна бути надрукована першої.