Dengan kode ini:
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;
}
Kita punya:
/tmp$ ./prorgam.out
Continuing on our merry way
We caught an int exception with value: -1
Bagaimana catch
blok membaca -1
sebagai int&
? Kami tidak dapat menetapkan nilai ke referensi nilai non-konstanta.
Dan mengapa yang kedua std::cout
pernyataan dieksekusi sebelum std::cerr
pernyataan pertama ?
We caught an int exception with value: -1
garis harus dicetak pertama.error stream
tidakstandard stream
.throw
membuat salinan (atau memindahkan) objek yang Anda lewatkan. Referensi mengikat salinan itu. Agak masuk akal bahwa salinan tersebut merupakan nilai tambah.Jawaban:
Ini tidak apa-apa karena [exception.throw] / 3
penekanan milikku
Seperti yang Anda lihat, meskipun bersifat sementara, kompiler memperlakukannya sebagai nilai untuk menginisialisasi pawang. Karena itu, Anda tidak perlu referensi const.
sumber
Dari referensi ini
throw
:Jadi sementara "objek" bersifat sementara, itu masih bernilai tinggi dan dengan demikian Anda dapat menangkapnya dengan referensi.
sumber