Указатель типа T* const можно присваивать указателю типа T*, но обратное присваивание считается незаконным (§R.7.1.6). Объекты типа const T или volatile T можно присваивать по адресу типа T или volatile T (см. так же §R.8.4).
Если левый операнд имеет тип указателя на член, правый операнд должен быть типа указатель на член или выражением-константой, дающим результат 0; перед присваиванием правый операнд преобразуется к типу левого операнда.
Присваивание объектам класса X (§R.9) задается функцией X::operator=() (§R.13.4.3). Если пользователь не определил свою функцию X::operator=(), для присваивания используется стандартный вариант (§R.12.8). Отсюда следует, что объект класса, который является прямым или непрямым производным от X, и однозначно описан как производный в части public (§R.4.6), можно присвоить объекту X.
Указатель на член класса B можно присваивать указателю на член того же типа класса D при условии, что D является прямым или непрямым производным класса B, и однозначно описан как производный в части public (§R.10.1.1).
Присваивание объекту типа "ссылка на T" сводится к присваиванию объекту типа T, который обозначается ссылкой.
Выполнение выражение вида E1 op= E2 эквивалентно выполнению E1 = E1 op (E2), однако E1 вычисляется лишь один раз. В операциях += и -= левый операнд может быть указателем, в этом случае правый (целочисленный) операнд преобразуется так, как объяснялось в §R.5.7. Все правые операнды и все левые операнды, не являющиеся ссылками, должны быть арифметического типа.
Для объектов класса присваивание в общем случае не совпадает с инициализацией (§R.8.4, §R.12.1, §R.12.6, §R.12.8).
R.5.18 Операция запятая
Операции запятая выполняются слева направо.
выражение:
выражение-присваивания
выражение, выражение-присваивания
Пара выражений, разделенных запятой, вычисляется слева направо и значение левого выражения уничтожается. Все побочные эффекты вычисления левого выражения могут возникать до вычисления правого выражения. Тип и значение результата совпадают с типом и значением правого выражения. Результат является адресом, если таковым является правое выражение.
В контекстах, где запятая имеет специальное значение, скажем в списке фактических параметров функции (§R.5.2.2) или в списке инициализаторов (§R.8.4), описанная здесь операция запятая может появляться только в скобках, например, вызов функции
f(a, (t=3,t+2), c);
содержит три параметра, причем второй имеет значение 5.
R.5.19 Выражения-константы
В нескольких местах описания C++ требуются выражения, которые дают в результате целочисленную константу, например: в задании границ массива (§R.8.2.4), в выражениях case (§R.6.4.2), для задания длины битового поля (§R.9.6) и как инициализирующее значение элемента перечисления (§R.7.2).
выражение-константа:
выражение-условия
В конструкции выражение-константа могут участвовать: литералы (§R.2.5), элементы перечисления, значения целочисленного типа со спецификацией const, инициализированные выражением-константой (§R.8.4) и выражения sizeof. Константы с плавающей точкой (§R.2.5.3) должны быть приведены к целочисленному типу. Допустимы только преобразования типа к целочисленному типу. В частности не допустимы функции, объекты классов, указатели и ссылки, если не считать их использования в sizeof. Операция запятая и операция присваивания не допустимы в выражении-константе.
R.6 Операторы
Все операторы, за исключением оговоренных случаев, выполняются один за другим.
оператор:
помеченный-оператор
оператор-выражение
составной-оператор
выбирающий-оператор
оператор-цикла
оператор-перехода
оператор-описания
R.6.1 Помеченный оператор
Оператор можно снабдить меткой.
помеченный-оператор:
идентификатор : оператор
case выражение-константа : оператор
default : оператор
Использование идентификатора в качестве метки является ее определением. Идентификатор метки может использоваться помимо этого только в качестве указания перехода в операторе goto. Областью видимости метки является функция, в которой она появилась. Метки нельзя повторно описывать в пределах одной функции. Нельзя использовать метку в операторе goto до ее определения. Метки имеют свое пространство именования и они не вступают в коллизию с другими идентификаторами.