Разница есть в таком случае:
...
В последнем варианте ( foobar2().bar(); ) у вас будет ошибка.
пример правильный, но в реальности такую конструкцию невозможно использовать по делу (не видел нормального применения ни разу). Когда в коде вижу
C
const std::string get_name () const;
const long get_size () const;
...
то так оцениваю варианты:
1. с вероятностью .9 автор идиот
2. с вероятностью .09 автор недавно изучил слово const и ставит его везде, где можно
3. с вероятностью .009 в проекте идиотский coding standart
4. в случае сложных типов всегда остаётся шанс, что это и правда нужно.. лучше внимательно изучить этот кусок кода
в общем лучше так не делать никогда, чтобы читающему не пришлось ломать голову над вашими экзерцисами