Являются ли строковые литералы и возвращаемые функцией значения lvalues ​​или rvalues?

Я знаю, что есть признанный ответ от @Ovidiu Latcu, но через некоторое время ошибка все еще сохраняется.

@Override
protected void onSaveInstanceState(Bundle outState) {
     //No call for super(). Bug on API Level > 11.
}

Crashlytics по-прежнему отправляет мне это странное сообщение об ошибке.

Однако ошибка теперь возникает только в версии 7+ (нуга). Моим решением было использовать commitAllowingStateLoss () вместо commit () ) при фрагментации.

Этот пост полезен для commitAllowingStateLoss () и никогда больше не имел проблемы с фрагментом.

Чтобы подвести итог, принятый ответ здесь может работать на версиях андроида до Нугата.

Это может спасти кого-то несколько часов поиска. счастливые кодировки. & lt; 3 ура

30
задан Ciro Santilli 新疆改造中心996ICU六四事件 18 June 2015 в 13:55
поделиться

1 ответ

  1. Строковые литералы - это Lvalues, но вы не можете их изменить
  2. rvalue, но если это указатель и ненуль, объект, который он указывает, - это Lvalue

Стандарт распознает первоначальные условия, стоящие в слева , а вправо , как в L = R ; Тем не менее, он говорит думать о Lvalue как значение локатора , которое примерно означает, что вы можете получить адрес объекта, и поэтому этот объект имеет местоположение. (См. 6.3.2.1 в C99 .)

К тому же токену стандарт отказался от термина RValue, и просто использует «значение выражения», которое практически все, включая литералы, включая такие Как ints, chars, float и т. Д. Кроме того, все, что вы можете сделать с rvalue, можно сделать с Lvalue, чтобы вы могли подумать обо всех Lvalues ​​как будучи Рновалами.

40
ответ дан 28 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: