Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Не совсем понятно, что ты имеешь в виду под вложенными классами. Предположу, что речь идет о членах-данных
L_L>L_L>class A{/*...*/};
L_L>class B{/*...*/};
L_L>class C
L_L>{
L_L> A a_;
L_L> B b_;
L_L> void fun()const;
L_L>};
L_L>
L_L>Если ты об этом, то да — в fun нельзя будет вызвать неконстантные функции-члены соответствующих классов.
L_L>Если a_ или b_ будет объявлен как mutable — то можно. Если они будут указателями (A * a_, B * b_) или ссылками — то опять же, можно.
Да я имел в виду именно это. А как еще это можно было понять/назвать?
I>>интересуют такие вопросы:
I>>1. Можно ли объявлять глобальную функцию (не член класса) как "int g(void) const". Думается что нет, т.к. не вижу смысла. Если да, то что это значит?
L_L>Нет, нельзя. Так же как и статическую функцию-член класса нельзя.
Ну и слава богу

.
I>>2. Можно ли объявлять функцию или метод как "const int g(void)"? Т.е. может ли функция возвращать константный объект? В каких случаях это может применяться?
L_L>Да, можно, но особого смысла в этом нет — то, что ты возвращаешь const int — будет r-value встроенного типа, поменять ты его не сможешь, даже если он неконстантный. Зато такая константность может понадобиться для объектов определенных тобой типов, чтоб для них (возвращаемых объектов) нельзя было вызвать неконстантные функции.
т.е. если я правильно понял это можно использовать например чтобы
class B
{
int f(void);
}
class A
{
B b;
public:
const B& get_b(void) {return b;}
};
...
{
A a();
a.get_b().f(); // compiler error!
}
Так?
Кроме того, наверное нельзя будет присвоить
A a();
const B b = a.get_b(); // ok
B bb = a.get_b(); // compiler error!
Правильно я понял?