Как const влияет на функцию при использовании в типе возвращаемого значения - PullRequest
2 голосов
/ 01 мая 2020

Как const влияет на function1 и отличает его от function2?

const int function1(const int &a) 
{
    return a+1;
}

int function2(const int &a)
{
    return a+1;
}

Я бы ожидал, что возвращаемая переменная будет const int вместо int, но при составлении сценария это не так, поскольку я могу изменить обе переменные, возвращенные из function1 и function2 и они, кажется, не имеют никакой видимой разницы. Следующий код работает без проблем, например:

int main () {
    int a = 1;
    auto b = function1(a);
    auto c = function2(a);
    ++b;
    ++c;
}

1 Ответ

1 голос
/ 01 мая 2020

В соответствии с cppreference :

Неклассное prvalue без массива не может быть квалифицировано cv. (Примечание: вызов функции или выражение приведения может привести к значению типа, не относящегося к классу cv, но квалификатор cv немедленно удаляется.)

Результаты, возвращаемые функцией end в качестве временных, особенно в этом случае. Поскольку int является примитивным типом, он не может быть const в качестве prvalue и, следовательно, теряет свое постоянство.

Если бы у нас была ссылка или указатель на int, мы бы не имели prvalue, поэтому const будет сохранен.

...