Что такое rvalues, lvalues, xvalues, glvalues ​​и prvalues?

Я считаю, что вы пытаетесь подключиться к чему-то, используя SSL, но что-то предоставляет сертификат, который не проверяется корневыми органами сертификации, такими как verisign. По сути, по умолчанию безопасные соединения могут быть установлены только в том случае, если человек, пытающийся для подключения знает ключи контрагентов или какой-то другой верндор, например verisign, может вмешаться и сказать, что предоставленный публичный ключ действительно прав.

Надежность всех ОС. Несколько авторитетных центров сертификации и более мелких эмитентов сертификатов должны быть сертифицированным одним из крупных сертификаторов, создающим цепочку сертификаторов, если вы понимаете, что я имею в виду ...

В любом случае вернемся к делу. У меня была аналогичная проблема при программировании Java-апплета и Java сервер. (Надеюсь, когда-нибудь я напишу полный блог-блог о том, как я получил всю безопасность для работы :))

По сути, мне нужно было извлечь открытые ключи с сервера и сохранить их в хранилище ключей внутри моего апплета и когда я подключился на сервер я использовал этот хранилище ключей для создания фабрики доверия и фабрики доверия для создания соединения ssl. Существуют также альтернативные процедуры, такие как добавление ключа к доверенному хосту JVM и изменение хранилища доверия по умолчанию при запуске.

Я сделал это примерно два месяца назад и не имею исходного кода для меня прямо сейчас .. используйте Google, и вы должны решить эту проблему. Если вы не можете передать мне сообщение, и я могу предоставить вам соответствующий исходный код для проекта. Не знаете, решает ли эта проблема вашу проблему, поскольку вы не предоставили код, который вызывает эти исключения. Кроме того, я работал с апплетами, я думал, что не могу понять, почему это не работает на Serverlets ...

P.S Я не могу получить исходный код перед выходными, так как внешний SSH отключен в моем офисе: (

1258
задан James McNellis 27 July 2015 в 16:49
поделиться

3 ответа

Как эти новые категории соотносятся с существующими категориями rvalue и lvalue?

lvalue C++03 по-прежнему является lvalue C++11, тогда как rvalue C++03 называется prvalue в C++ 11.

17
ответ дан 19 December 2019 в 20:16
поделиться

Думаю, этот документ может послужить не таким коротким введением: n3055

Вся резня началась с семантики ходов. Как только у нас появились выражения, которые можно перемещать, а не копировать, внезапно стали понятными правила, требующие различия между выражениями, которые можно перемещать, и в каком направлении.

Судя по черновику, разница значений r/l остается прежней, только в контексте перемещения вещей становится грязно.

Нужны ли они? Вероятно, нет, если мы хотим отказаться от новых функций. Но чтобы обеспечить лучшую оптимизацию, мы, вероятно, должны принять их.

Цитируя n3055:

  • An lvalue (так называемое, исторически, потому что lvalues ​​могут появиться на левая часть задания выражение) обозначает функцию или объект. [Пример: если E является выражение типа указателя, затем *E выражение lvalue, относящееся к объект или функция, к которой E точки. В качестве другого примера, результат вызова функции, возвращаемый тип — ссылка lvalue lvalue.]
  • xvalue (an «истекающее» значение) также относится к объект, обычно ближе к концу его срок службы (чтобы его ресурсы могли переехать, например).Значение x равно результат определенных видов выражения, включающие rvalue использованная литература. [Пример: результат вызова функции, возвращаемый тип — ссылка rvalue значение x.]
  • glvalue («обобщенное» lvalue) является lvalue или xvalue.
  • Значение r (так называемое, исторически, потому что rvalue могли появляются в правой части выражение присваивания) является xvalue, временный объект или его подобъект или значение, которое не связанный с объектом.
  • А prvalue («чистое» rvalue) — это rvalue это не xvalue. [Пример: результат вызова функции, возвращаемый тип не является ссылкой prvalue]

Рассматриваемый документ является отличным справочником по этому вопросу, потому что он показывает точные изменения в стандарте, которые произошли в результате введения новой номенклатуры.

606
ответ дан 19 December 2019 в 20:16
поделиться

Категории C++03 слишком ограничены, чтобы корректно отразить введение ссылок rvalue в атрибуты выражений.

С их введением было сказано, что безымянная ссылка на rvalue оценивается как rvalue, так что разрешение перегрузки будет предпочитать привязки ссылок на rvalue, что заставит его выбирать конструкторы перемещения вместо конструкторов копирования. Но было обнаружено, что это вызывает проблемы повсюду, например, с динамическими типами и с квалификациями.

Чтобы продемонстрировать это, рассмотрим

int const&& f();

int main() {
  int &&i = f(); // disgusting!
}

В проектах до xvalue это было разрешено, потому что в C++03 rvalue неклассовых типов никогда не уточняется cv. Но предполагается, что const применяется в случае rvalue-reference, потому что здесь мы делаем ссылки на объекты (= память!), и удаление const из неклассовых rvalue в основном для причина в том, что вокруг нет предмета.

Проблема с динамическими типами аналогична. В C++03 значения rvalue типа класса имеют известный динамический тип — это статический тип этого выражения. Потому что, чтобы сделать это по-другому, вам нужны ссылки или разыменования, которые оцениваются как lvalue. Это не так с безымянными ссылками rvalue, но они могут демонстрировать полиморфное поведение. Поэтому, чтобы решить эту проблему,

  • безымянные ссылки на rvalue становятся xvalues. Они могут быть квалифицированы и потенциально могут иметь разные динамические типы. Они, как и предполагалось, предпочитают ссылки rvalue во время перегрузки и не будут связываться с неконстантными ссылками lvalue.

  • То, что раньше было rvalue (литералы, объекты, созданные приведением к нессылочным типам), теперь становится prvalue. Они имеют те же предпочтения, что и xvalue, во время перегрузки.

  • То, что раньше было lvalue, остается lvalue.

И две группы сделаны, чтобы захватить те, которые могут быть квалифицированы и могут иметь разные динамические типы (glvalues), и те, где перегрузка предпочитает привязку ссылки rvalue (rvalues).

34
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

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