2015-07-16 1 views
5

я видел в проекте N4268 концепции под названием «неназванная именующий» в бастовали, хотя части нижеЧто такое неназванная lvalue?

[Примечание: временных неназванная lvalues, и названная lvalues, без связи являются временного объекта не приемлемые шаблонные аргументы, когда соответствующий шаблон-параметр имеет ссылочный тип. [Пример: ...]]

Я много искал, но ни stackoverflow, ни google не дали мне ответа. я только нашел этот пост о стоимости категорий

What are rvalues, lvalues, xvalues, glvalues, and prvalues

Но это не помогло.

+0

[О том, как распознать ссылку Rvalue или Lvalue и правило if-it-has-a-name] (http://stackoverflow.com/q/27554296/3953764) –

+0

'* ptr' является примером lvalue без имени –

+0

Выражение вызова функции, где указанная функция имеет тип возвращаемого значения lvalue, также является неназванным значением lvalue. – ibrahim5253

ответ

4

Не все выражения lvalue имеют имена. На самом деле, формулировка N4296 дает нам несколько примеров:

Для шаблонного параметра без типа ссылки или типа указателя, значение константного выражения не будет называть (или для указателя типа , не должен быть адрес):

  • подобъектом (1.8),
  • временный объект (12.2),
  • строковым (2.14.5),
  • результат на ypeid (5.2.8) или
  • a предопределенный func переменная (8.4.1).

Кроме того, информация cppreference «ы по категориям стоимости идет в подробность о lvalues:

Именующего выражением является выражением, которое идентифицирует, не временный объект или функцию в , не являющийся членом.

следующие выражения: lvalues ​​

  • Имя переменной или функции в объеме, независимо от типа, такие как станд :: Cin или станд :: End L,. Даже если тип переменной имеет значение rvalue , выражение, состоящее из его имени, является выражением lvalue .

  • Вызов функции или перегружен выражение оператором, если функция-х или перегружен тип возвращаемого оператора является ссылкой-значение, например, станд :: GetLine (станд :: CIN, ул) или станд :: соиЬ < < 1 или str1 = str2 или ++ ITER

  • Встроенный преинкремента и предекремента разыменованием, назначение и назначение соединения, нижний индекс (за исключением на xvalue массив), член доступа (для не-статических неопорных членов, за исключением из значений xvalues, членов и нестатических функций-членов), членский доступ через указатель на элемент данных, если левый операнд lvalu e, comma оператор, если правый операнд lvalue, тернарный условный, если второй и третий операнды lvalues.

  • Литой выражение для ссылочного типа lvalue.

  • Строка буквальным

Тем не менее, это все не имеет значения, как сфера применения изменений является предложение Allow constant evaluation for all non-type template arguments.