В следующем коде я выбрасываю int, ловлю его как const int &, перебрасываю и снова ловлю, ловлю как int &.
#include <iostream>
int main()
{
try
{
try
{
int x = 1;
throw x;
}
catch(const int& e)
{
std::cout << "Inner catch" << std::endl;
throw;
}
}
catch(int & e1)
{
std::cout << "Outer catch" << std::endl;
}
return 0;
}
Вышеуказанная программа успешно компилируется и печатает
Inner catch
Outer catch
С другой стороны, следующая программа, в которой я пытаюсь инициализировать int & const int &, даже не компилируется.
#include <iostream>
int main()
{
int x = 0;
const int& y = x;
int& z = y
return 0;
}
Я получаю следующую ошибку, как и ожидалось
binding ‘const int’ to reference of type ‘int&’ discards qualifiers
int& z = y
Почему мне разрешено отлавливать const int & как int &, но я не могу назначать cons int & int &?