Разница в том, что если вы получите этот результат в ссылку самостоятельно, вы можете отслеживать изменения переменной-члена целого числа в собственном имени переменной, не вызывая функцию.
const &int x = myObject.getFoo();
cout<<x<<endl;
//...
cout<<x<<endl;//x might have changed
Вероятно, это не лучший выбор дизайна, и очень опасно возвращать ссылку (постоянную или нет), если возвращается переменная, которая освобождается из области видимости. Поэтому, если вы возвращаете ссылку, будьте осторожны, чтобы убедиться, что это не переменная, которая выходит за рамки.
Существует небольшая разница и для модификатора, но, опять же, вероятно, это не то, что стоит делать или было задумано.
void test1(int x)
{
cout<<x<<endl;//prints 1
}
void test2(const int &x)
{
cout<<x<<endl;//prints 1 or something else possibly, another thread could have changed x
}
int main(int argc, char**argv)
{
int x = 1;
test1(x);
//...
test2(x);
return 0;
}
Таким образом, конечный результат заключается в том, что вы получаете изменения даже после передачи параметров.