Запутался в постоянных объектах C ++ - PullRequest
4 голосов
/ 14 ноября 2010

Я запутался в постоянных объектах в C ++

Когда мы передали постоянный объект / ссылку на const-объект, это означает, что мы не можем редактировать значения атрибута этого объекта?

или если это не то, что означает, или constant в том смысле, что это «ссылающийся» объект или «атрибуты»

также, когда мы возвращаем постоянный объект

объявление функции как

return_type function_name(parameters) const
{

}

ключевое слово const находится в конце функции, это синтаксис? и почему, если мы возвращаем const объект, он не должен выглядеть следующим образом

const return_type function_name(parameters) 
{

}

Извините, если вопрос нуб;)

Ответы [ 3 ]

6 голосов
/ 14 ноября 2010

Этот синтаксис:

return_type function_name(parameters) const
{

}

Указывает, что function_name() может быть вызвано для экземпляра класса const.Это не влияет на константу возвращаемого значения.

const return_type function_name(parameters)
{

}

... означает, что значение, возвращаемое из function_name() является константой (и ничего не говорит о константностиобъекта, вызывающего функцию-член.)

3 голосов
/ 14 ноября 2010

Когда мы передали постоянный объект / ссылку на объект const, это означает, что мы не можем редактировать значения атрибутов этого объекта?

Да. Если функция const, то функция не может изменять любые неизменяемые поля в классе. (Или вызовите любой другой неконстантный метод в классе).

и почему, если мы возвращаем объект const, он не должен выглядеть следующим образом

Потому что тип возвращаемого значения также может быть постоянным. Учтите следующее:

#include <string>

class MyClass
{
    std::string data;
public:
    void SetData(const std::string& content)
    {
        data.assign(content);
    }
    const std::string& GetData() const //Note that the function is const, and so
    {                                  //is the reference it returns.
        return data;
    }
};

Обратите внимание, что мы возвращаем ссылку const на внутренний элемент. Если мы вернем ссылку не const, то кто-то сможет использовать эту ссылку для изменения закрытого члена класса, в данном случае MyClass::data.

0 голосов
/ 14 ноября 2010

Эффективно добавленное const изменяет первый «скрытый» параметр метода с ClassType * const this на const ClassType * const this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...