none
Язык С, const RRS feed

  • Общие обсуждения

  • Здравствуйте, у меня есть вопрос.

    К примеру, возьмем функцию:

    type *some_func(const type *const _values);

    Условно говоря, данная функция получает константный указатель на константные данные типа type.

    Это означает, что:

    1) Указатель _values защищен от "случайного" изменения внутри тела функции, что защищает от множества неприятных багов, которые могут появиться из-за невнимательности;

    2) Данные, на который указывает указатель _values, - так же защищены от попыток изменения внутри тела функции.

    Вопрос вот в чем: есть ли смысл использовать const для возвращаемого функцией значения?

    Я могу себе представить лишь ситуацию:
    const type *func(void);

    В которой, допустим, нужна защита от изменения данных, которые где-то создались, на которые вернулся указатель, и теперь данные типа type являются неизменяемыми. Например:

    type *obj = func();// Compiler error
    const type *obj = func();// Ok, но данные, на которые указывает obj, изменять нельзя.


    Для записей вида:

    type *const func(void);
    const
    type func(void);

    Я не могу придумать реального примера применения, ведь возвращаемое функцией значение - это lvalue, и попытка его изменить - так или иначе вызовет ошибку:

    func() += 3;// Compiler error


    Хотелось бы разобраться в этих тонкостях.








    16 марта 2018 г. 6:59