Как уже говорилось в других ответах, obj
является ссылкой на объект const base
. Однако это не означает, что объект, на который он ссылается, имеет либо тип base
, либо объект, на который он ссылается, const
, просто func
не может изменить obj
до , что ссылка . Например:
struct derived : base { ... };
derived d;
func(d);
является законным, а:
bool other_func(const base& b, other_object& o) {
base b_copy = b;
o.foo();
return b_copy == b;
}
может вернуть false
, если o
имеет внутреннюю неконстантную ссылку на b
(или что-то внутри нее) и o.foo()
изменяет b
. Это имеет практическое значение для таких функций, как
std::string::operator=(const std::string& other);
, где наивная реализация может сделать неправильную вещь для my_str = my_str
.