Пространства имён
Варианты
Действия

Value categories

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Когда C + + выражение (оператор с аргументами) оценивается, это приводит к значение некоторых не ссылочного типа. Каждое выражение принадлежит ровно одной из основных категорий значения.
Оригинал:
When a C++ expression (an operator with its arguments) is evaluated, it results in a value of some non-reference type. Each expression belongs to exactly one of the primary value categories.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Первичные категории

[править] именующее

' Именующее это выражение, которое определяет не-временного объекта или, не являющихся членами функция.
Оригинал:
An lvalue is an expression that identifies a non-temporary object or a non-member function.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Следующие выражения lvalues
Оригинал:
The following expressions are lvalues:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Название объекта или функции в области, независимо от их типа, таких как std::cin или std::endl. Даже если тип объекта является RValue ссылки, выражение, состоящее из названия является выражение именующее.
    Оригинал:
    The name of an object or function in scope, regardless of type, such as std::cin or std::endl. Even if the object's type is rvalue reference, the expression consisting of its name is an lvalue expression.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Вызов функции или оператор выражение, если тип возвращаемого значения или оператор функции является ссылкой именующее, таких как std::getline(cin, str) или cout << 1 или или ++n или *p
    Оригинал:
    Function call or operator expression if the function's or operator's return type is an lvalue reference, such as std::getline(cin, str) or cout << 1 or or ++n or *p
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Cast выражения типа именующее ссылки.
    Оригинал:
    Cast expression to lvalue reference type.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Вызов функции выражения, если тип возвращаемого значения функции является RValue ссылкой на функцию типа (редко)
    Оригинал:
    Function call expression if the function's return type is rvalue reference to function type (rare)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Cast выражения RValue ссылкой на функцию.
    Оригинал:
    Cast expression to rvalue reference to function.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Свойства:
Оригинал:
Properties:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • То же, что glvalue (см. ниже)
    Оригинал:
    Same as glvalue (below)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Адрес именующее могут быть приняты: &++i и &std::endl действительны выражения.
    Оригинал:
    Address of an lvalue may be taken: &++i and &std::endl are valid expressions.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Модифицируемые именующее может быть использован в качестве первого (левого) аргумент встроенный оператор присваивания.
    Оригинал:
    A modifiable lvalue may be used as the first (left) argument of the built-in assignment operator.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Именующее могут быть использованы для инициализировать ссылкой именующее, это связывает новое имя с целью определить по выражению.
    Оригинал:
    An lvalue may be used to инициализировать ссылкой именующее; this associates a new name with the object identified by the expression.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] RValue NJ / prvalue NJ

' Prvalue это выражение, которое определяет временный объект (или их подобъектов), либо значение, не связанное с каким-либо объектом.
Оригинал:
A prvalue is an expression that identifies a temporary object (or a subobject thereof) or is a value not associated with any object.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Следующие выражения prvalues
Оригинал:
The following expressions are prvalues:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Буквальное, таких как 42 или true или nullptr.
    Оригинал:
    Literal, such as 42 or true or nullptr.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Вызов функции / оператора выражения, если функция или тип возвращаемого оператором не является ссылкой, например, str.substr(1, 2) или 2+2
    Оригинал:
    Function call/operator expression if the function's or the operator's return type is not a reference, such as str.substr(1, 2) or 2+2
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Cast выражение любого типа, кроме типа ссылки.
    Оригинал:
    Cast expression to any type other than reference type.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Лямбда-выражения, такие, как [](int x){return x*x;}
    Оригинал:
    Lambda expressions, such as [](int x){return x*x;}
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Свойства:
Оригинал:
Properties:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • То же, что правая часть оператора (см. ниже)
    Оригинал:
    Same as rvalue (below)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • prvalue не может быть полиморфная: динамический тип объекта, он определяет это всегда тип выражения.
    Оригинал:
    a prvalue cannot be polymorphic: the dynamic type of the object it identifies is always the type of the expression.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Номера класса prvalue не может быть константной квалифицированных.
    Оригинал:
    a non-class prvalue cannot be const-qualified.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] xvalue NJ

' Xvalue это выражение, которое определяет "истекает" объект, то есть объект, который может быть перемещен из. Объект, определенный выражением xvalue может быть безымянным временное, оно может быть именованный объект в области, или любой другой объект, но если использовать в качестве аргумента функции, xvalue всегда будет связываться с перегрузкой RValue ссылки, если доступно.
Оригинал:
An xvalue is an expression that identifies an "expiring" object, that is, the object that may be moved from. The object identified by an xvalue expression may be a nameless temporary, it may be a named object in scope, or any other kind of object, but if used as a function argument, xvalue will always bind to the rvalue reference overload if available.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Только следующие выражения XValues
Оригинал:
Only the following expressions are xvalues:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Выражение вызова функции, если тип возвращаемого значения функции является RValue ссылкой на тип объекта, такие как std::move(val)
    Оригинал:
    A function call expression, if the function's return type is an rvalue reference to object type, such as std::move(val)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Литые выражения RValue ссылкой на тип объекта, такие как static_cast<T&&>(val) или (T&&)val
    Оригинал:
    A cast expression to an rvalue reference to object type, such as static_cast<T&&>(val) or (T&&)val
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • нестатический член класса доступа выражение, в котором объект выражение xvalue
    Оригинал:
    a non-static class member access expression, in which the object expression is an xvalue
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Указатель на член выражения, в которых первый операнд xvalue, а второй операнд является указателем на член данных.
    Оригинал:
    A pointer-to-member expression in which the first operand is an xvalue and the second operand is a pointer to data member.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Свойства:
Оригинал:
Properties:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • То же, что правая часть оператора (см. ниже)
    Оригинал:
    Same as rvalue (below)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • То же, что glvalue (см. ниже)
    Оригинал:
    Same as glvalue (below)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Как prvalues, XValues ​​связываться с RValue ссылки, но в отличие от prvalues, xvalue могут быть полиморфными, и не-класса xvalue может быть резюме квалифицированных.
Оригинал:
Like prvalues, xvalues bind to rvalue references, but unlike prvalues, an xvalue may be polymorphic, and a non-class xvalue may be cv-qualified.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Смешанные категории

[править] glvalueNJ

Glvalue это выражение, которое является либо именующее или xvalue.
Оригинал:
A glvalue is an expression that is either an lvalue or an xvalue.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Свойства:
Оригинал:
Properties:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Glvalue может быть неявно преобразован в prvalue с именующее к RValue, массива в указатель, или функции в указатель неявного преобразования.
    Оригинал:
    A glvalue may be implicitly converted to prvalue with lvalue-to-rvalue, array-to-pointer, or function-to-pointer неявного преобразования.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Glvalue могут быть полиморфными: динамический тип объекта, он определяет не обязательно статический тип выражения.
    Оригинал:
    A glvalue may be polymorphic: the dynamic type of the object it identifies is not necessarily the static type of the expression.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] RValue NJ

RValue это выражение, которое является либо prvalue или xvalue.
Оригинал:
An rvalue is an expression that is either a prvalue or an xvalue.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Свойства (обратите внимание, эти относятся как к XValues ​​и prvalues, который означает, что они относятся к предварительной C + +11 rvalues, а)
Оригинал:
Properties (note, these apply to both xvalues and prvalues, which means they apply to the pre-C++11 rvalues as well)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Адрес RValue не могут быть приняты: &i++ и &42 и &std::move(val) являются недействительными.
    Оригинал:
    Address of an rvalue may not be taken: &i++ and &42 and &std::move(val) are invalid.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • RValue могут быть использованы для инициализации константной ссылке именующее, в этом случае срок службы объекта, определенные RValue продлен до сферу ведения концах.
    Оригинал:
    An rvalue may be used to инициализации константной ссылке именующее, in which case the lifetime of the object identified by the rvalue is extended until the scope of the reference ends.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • RValue могут быть использованы для инициализации RValue ссылки, в этом случае срок службы объекта, определенные RValue продлен до сферу ведения концах.
    Оригинал:
    An rvalue may be used to инициализации RValue ссылки, in which case the lifetime of the object identified by the rvalue is extended until the scope of the reference ends.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • При использовании в качестве аргумента функции, и когда две перегрузки функции доступны, один с параметром RValue исходной, а другая принимает именующее ссылкой на константный параметр, rvalues ​​связываться с перегрузкой RValue ссылки (таким образом, если оба копирования и перемещения конструкторы имеются в наличии, RValue аргументы вызова двигаться конструктор, а также с копировать и перемещать операторы присваивания).
    Оригинал:
    When used as a function argument and when two overloads of the function are available, one taking rvalue reference parameter and the other taking lvalue reference to const parameter, rvalues bind to the rvalue reference overload (thus, if both copy and move constructors are available, rvalue arguments invoke the двигаться конструктор, and likewise with copy and move assignment operators).
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Специальные категории

[править] Ожидание вызова функции-члена

Выражения obj.*mfp и ptr->*mfp где mfp является указателем на функцию-член, классифицируются как prvalue выражений, но они не могут быть использованы для инициализации ссылки, как функция аргументов, или для любой цели на всех, за исключением левого аргумента функции называют выражение, например, (pobj->*ptr)(args).
Оригинал:
The expressions obj.*mfp and ptr->*mfp where mfp is a pointer to member function, are classified as prvalue expressions, but they cannot be used to initialize references, as function arguments, or for any purpose at all, except as the left-hand argument of a function call expression, e.g. (pobj->*ptr)(args).
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пустота выражений

Выражения вызова функции возвращается void, отлитый выражения void, и бросать-выражения классифицируются как prvalue выражений, но они не могут быть использованы для инициализации ссылки или как аргументы функции. Они могут быть использованы в отбрасывается значение контекста (например, по линии своей, а левый аргумент оператор запятая и т.д.) и в return заявление, в функции, возвращающей void. Кроме того, бросить-выражений (но не другие prvalues ​​недействительными) могут быть использованы в качестве второго и третьего операндов Условный оператор?:.
Оригинал:
Function call expressions returning void, cast expressions to void, and throw-expressions are classified as prvalue expressions, but they cannot be used to initialize references or as function arguments. They can be used in a discarded-value context (e.g. on a line of its own, as the left argument of the comma operator, etc) and in the return statement in a function returning void. In addition, throw-expressions (but not other void prvalues) may be used as the second and the third operands of the Условный оператор?:.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.