Если функция возвращает значение int, можно ли присвоить ей значение int?

StackOverflow https://stackoverflow.com/questions/2216889

  •  19-09-2019
  •  | 
  •  

Вопрос

Если функция возвращает значение int, может ли оно быть присвоено значением int?Я не вижу особого смысла присваивать значение функции.

int f() {}

f() = 1;

Я заметил, что, если функция возвращает ссылку на int, все в порядке.Ограничено ли это только int?как насчет других типов?или какие-то другие правила?

int& f() {}

f() = 1;
Это было полезно?

Решение

Первая функция возвращает целое число по значению, которое R-Value. Анкет Вы не можете назначить R-значение в целом. Второй f () возвращает ссылку на целое число, которое является значением L, - так что вы можете назначить ему.

int a = 4, b = 5;

int& f() {return a;}

...
f() = 6;
// a is 6 now

ПРИМЕЧАНИЕ. Вы не присваиваете значение функции, вы просто присваиваете его возвращаемому значению. Будьте осторожны со следующим:

int& f() { int a = 4; return a; }

Вы возвращаете ссылку на временный, который больше не действителен после возврата функции. Доступ к ссылке вызывает неопределенное поведение.

Другие советы

Это не ограничение только для Int, но для примитивных типов нет смысла делать это. Это полезно, когда у вас есть занятия

Если функция возвращает объект по значению, тогда возможна назначение, даже если вызов функции является RValue. Например:

std::string("hello") = "world";

Это создает временный струнный объект, мутирует его, а затем немедленно разрушает его. Более практичным примером является:

some_function(++list.begin());

Вы не могли бы написать list.begin() + 1, поскольку дополнение невозможно в итераторах списка, но приращение в порядке. Этот пример не включает назначение, но назначение является лишь особым случаем более общего правила «функции члена члена могут быть вызваны на RVALUES».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top