-
Просто задайтесь вопросом, является ли буквальная строка lvalue или rvalue. Существуют ли другие литералы (например, int, float, char и т.д.) Lvalue или rvalue?
-
Является ли возвращаемое значение функции lvalue или rvalue?
Как вы говорите разницу?
Просто задайтесь вопросом, является ли буквальная строка lvalue или rvalue. Существуют ли другие литералы (например, int, float, char и т.д.) Lvalue или rvalue?
Является ли возвращаемое значение функции lvalue или rvalue?
Как вы говорите разницу?
Стандарт C распознает исходные термины, стоящие слева и справа, как в L = R
; однако он говорит, что значение lvalue является значением локатора, что примерно означает, что вы можете получить адрес объекта и, следовательно, этот объект имеет местоположение. (См. 6.3.2.1 в C99.)
К тому же стандарт отказался от термина rvalue и просто использует "значение выражения", которое есть практически все, включая литералы, такие как ints, chars, floats и т.д. Кроме того, все, что вы можете сделать с rvalue можно сделать также с lvalue, так что вы можете считать все lvalues как rvalues.
В C есть два вида выражений: 1. lvalue: выражение, которое является lvalue, может отображаться как в левой, так и в правой части задания. 2. rvalue: выражение, которое является rvalue, может появляться справа, но не в левой части задания. Переменные являются lvalues и поэтому могут отображаться в левой части задания. Числовые литералы являются значениями r и поэтому не могут быть назначены и не могут появляться с левой стороны. Ниже приведено правильное выражение: int g = 20; Но следующее не является допустимым оператором и генерирует ошибку времени компиляции: 10 = 20;
существует определение для С++ от Microsoft. По этому определению, буквальная строка, например "hello world", равна lvalue, потому что она const, а не временная. Фактически он сохраняется на протяжении всей вашей жизни приложения.