Возвращение ссылки функцией

190
25 января 2018, 19:42

Есть код:

int x;
int& setx();
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    setx() = 92;
    cout << "x =" << x << endl;

    system("pause");
    return 0;
}
int& setx() {
    return x; // возвращает значение, которое будет изменено
}

Почему без знака амперсанда он не пашет? Типо, только тип возвращаемоо значения(т.е. ссылка) может поменять переменную?

Answer 1

Если убрать "знак &", т.е. ссылку, то возвращаемое значение ...

  1. ... никак не будет связано с оригинальной переменной x. Даже если вы как-то его поменяете, то на переменную x это никакого влияния не окажет.

    (Невозможно поменять возвращаемое значение типа int, но это может быть возможно для других возвращаемых типов, например std::string)

  2. ... не будет являться lvalue, т.е. присваивать ему чего-либо при помощи встроенного оператора присваивания будет нельзя.

Что вы имеете в виду под "не пашет" из вашего вопроса не ясно.

READ ALSO
Вызов конструктора С++

Вызов конструктора С++

Доброго времени суток

185
Появились ли в Стандарте С++ отражения?

Появились ли в Стандарте С++ отражения?

Есть у меня проект интерпретатора Basic, написанный на С++Проект довольно давний, ему уже лет 20

234
Не видит библиотеки при смене набора инструментов платформы C++ WinAPI

Не видит библиотеки при смене набора инструментов платформы C++ WinAPI

В общем, проблема в следующемЕсть задание написать простое приложение на чистом WinAPI

194