Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Дисциплины:
2017-10-16 | 223 |
5.00
из
|
Заказать работу |
|
|
Для выражения expr в форме w = expr-rhs:
· состояние определенного присваивания переменной v перед выражением expr-rhs соответствует состоянию определенного присваивания переменной v перед выражением expr.
· если переменная w является той же самой переменной, что и переменная v, переменная v после выражения expr является определенно присвоенной. В противном случае состояние определенного присваивания переменной v после выражения expr соответствует состоянию определенного присваивания переменной v после выражения expr-rhs.
5.3.3.24 Выражения &&
Для выражения expr в форме expr-first && expr-second:
· состояние определенного присваивания переменной v перед выражением expr-first соответствует состоянию определенного присваивания переменной v перед выражением expr;
· переменная v перед выражением expr-second является определенно присвоенной, если состояние переменной v после выражения expr-first является определенно присвоенным или "определенно присвоенным в результате выполнения выражения с итогом true". В обратном случае она не является определенно присвоенной;
· состояние определенного присваивания переменной v после выражения expr определяется следующими правилами:
o если выражение expr-first является константным выражением, имеющим значение false, состояние определенного присваивания переменной v после выражения expr соответствует состоянию определенного присваивания переменной v после выражения expr-first;
o в противном случае, если переменная v после выражения expr-first является определенно присвоенной, переменная v после выражения expr является определенно присвоенной;
o в противном случае, если состояние переменной v после выражения expr-second является определенно присвоенным, а состояние переменной v после выражения expr-first соответствует состоянию "определенно присвоенная в результате выполнения выражения с итогом false", переменная v после выражения expr является определенно присвоенной;
|
o в противном случае, если переменная v после выражения expr-second является определенно присвоенной или "определенно присвоенной в результате выполнения выражения с итогом true", переменная v после выражения expr является "определенно присвоенной в результате выполнения выражения с итогом true";
o в противном случае, если переменная v после выражения expr-first имеет состояние "определенно присвоенная в результате выполнения выражения с итогом false", а после выражения expr-second переменная v имеет состояние "определенно присвоенная в результате выполнения выражения с итогом false", то после выражения expr переменная v имеет состояние "определенно присвоенная в результате выражения с итогом false";
o в противном случае переменная v после выражения expr не является определенно присвоенной.
В этом примере
class A
{
static void F(int x, int y) {
int i;
if (x >= 0 && (i = y) >= 0) {
// i definitely assigned
}
else {
// i not definitely assigned
}
// i not definitely assigned
}
}
переменная i считается определенно присвоенной только в одном из внедренных операторов оператора if. В операторе if в методе F переменная i является определенно присвоенной в первом внедренном операторе, поскольку выполнение выражения (i = y) всегда предшествует выполнению этого внедренного оператора. Наоборот, переменная i не является определенно присвоенной во втором внедренном операторе, поскольку проверка условия x >= 0 может завершиться с итогом false, в результате чего для переменной i не будет выполнено присваивание.
5.3.3.25 Выражения ||
Для выражения expr в форме expr-first || expr-second:
· состояние определенного присваивания переменной v перед выражением expr-first соответствует состоянию определенного присваивания переменной v перед выражением expr;
· переменная v перед выражением expr-second является определенно присвоенной, если состояние переменной v после выражения expr-first является определенно присвоенным или "определенно присвоенным в результате выполнения выражения с итогом false". В обратном случае она не является определенно присвоенной;
|
· состояние определенного присваивания переменной v после выражения expr определяется следующими факторами:
o если выражение expr-first является константным выражением, имеющим значение true, состояние определенного присваивания переменной v после выражения expr соответствует состоянию определенного присваивания переменной v после выражения expr-first;
o в противном случае, если переменная v после выражения expr-first является определенно присвоенной, переменная v после выражения expr является определенно присвоенной;
o в противном случае, если состояние переменной v после выражения expr-second является определенно присвоенным, а состояние переменной v после выражения expr-first соответствует состоянию "определенно присвоенная в результате выполнения выражения с итогом true", переменная v после выражения expr является определенно присвоенной;
o в обратном случае, если переменная v после выражения expr-second является определенно присвоенной или "определенно присвоенной в результате выполнения выражения с итогом false", переменная v после выражения expr является "определенно присвоенной в результате выполнения выражения с итогом false";
o в обратном случае, если переменная v после выражения expr-first имеет состояние "определенно присвоенная в результате выполнения выражения с итогом true", а после выражения expr-second имеет переменная v состояние "определенно присвоенная в результате выполнения выражения с итогом true", переменная v после выражения expr имеет состояние "определенно присвоенная в результате выражения с итогом true";
o в противном случае переменная v после выражения expr не является определенно присвоенной.
В этом примере
class A
{
static void G(int x, int y) {
int i;
if (x >= 0 || (i = y) >= 0) {
// i not definitely assigned
}
else {
// i definitely assigned
}
// i not definitely assigned
}
}
переменная i считается определенно присвоенной только в одном из внедренных операторов оператора if. В операторе if в методе G переменная i является определенно присвоенной во втором внедренном операторе, поскольку выполнение выражения (i = y) всегда предшествует выполнению этого внедренного оператора. Наоборот, переменная i не является определенно присвоенной в первом внедренном операторе, поскольку проверка условия x >= 0 может завершиться с итогом true, в результате чего переменной i не будет выполнено присваивание.
|
5.3.3.26! выражения
Для выражения expr в форме! expr-operand:
· состояние определенного присваивания переменной v перед выражением expr-operand соответствует состоянию определенного присваивания переменной v перед выражением expr.
· состояние определенного присваивания переменной v после выражения expr определяется следующими правилами:
o если переменная v после выражения expr-operand является определенно присвоенной, переменная v после выражения expr также является определенно присвоенной;
o если переменная v после выражения expr-operand не является определенно присвоенной, переменная v после выражения expr также не является определенно присвоенной;
o если переменная v после выражения expr-operand имеет состояние "определенно присвоенная в результате выполнения выражения с итогом false", переменная v после выражения expr имеет состояние "определенно присвоенная в результате выполнения выражения с итогом true";
o если переменная v после выражения expr-operand имеет состояние "определенно присвоенная в результате выполнения выражения с итогом true", переменная v после выражения expr имеет состояние "определенно присвоенная в результате выполнения выражения с итогом false".
Выражения??
Для выражения expr в форме expr-first?? expr-second:
· состояние определенного присваивания переменной v перед выражением expr-first соответствует состоянию определенного присваивания переменной v перед выражением expr;
· состояние определенного присваивания переменной v перед выражением expr-second соответствует состоянию определенного присваивания переменной v после выражения expr-first.
· состояние определенного присваивания переменной v после выражения expr определяется следующими факторами:
o если выражение expr-first является константным выражением (§7.19), имеющим значение NULL, состояние переменной v после выражения expr соответствует состоянию переменной v после выражения expr-second;
|
· В обратном случае состояние переменной v после выражения expr соответствует состоянию определенного присваивания переменной v после выражения expr-first.
5.3.3.28 Выражения?:
Для выражения expr в форме expr-cond? expr-true: expr-false:
· состояние определенного присваивания переменной v перед выражением expr-cond соответствует состоянию переменной v перед выражением expr;
· Переменная v перед выражением expr-true считается определенно присвоенной только при соблюдении одного из следующих условий:
o выражение expr-cond является константным выражением со значением false;
o переменная v после выражения expr-cond является определенно присвоенной или "определенно присвоенной в результате выполнения выражения с результатом true";
· Переменная v перед выражением expr-false считается определенно присвоенной только при соблюдении одного из следующих условий:
o expr-cond является константным выражением, имеющим значение true
· переменная v после выражения expr-cond является определенно присвоенной или "определенно присвоенной в результате выполнения выражения с результатом false";
· состояние определенного присваивания переменной v после выражения expr определяется следующими правилами:
o если выражение expr-cond является константным выражением (§7.19), имеющим значение true, состояние переменной v после выражения expr соответствует состоянию переменной v после выражения expr-true;
o в обратном случае, если выражение expr-cond является константным выражением (§7.19), имеющим значение false, состояние переменной v после выражения expr соответствует состоянию переменной v после выражения expr-false;
o в обратном случае, если переменная v является определенно присвоенной после выражения expr-true, а также переменная v является определенной присвоенной после выражения expr-false, переменная v после выражения expr также является определенно присвоенной;
o в противном случае переменная v после выражения expr не является определенно присвоенной.
Анонимные функции
Для лямбда-выражений или выражений анонимного метода expr с телом body, содержащим блок или выражение:
· Состояние определенного присваивания внешней переменной v перед телом body соответствует состоянию переменной v перед выражением expr. Таким образом, состояние определенного присваивания внешних переменных наследуется из контекста анонимной функции.
· Состояние определенного присваивания внешней переменной v после выражения expr соответствует состоянию переменной v перед выражением expr.
Пример:
delegate bool Filter(int i);
void F() {
int max;
// Error, max is not definitely assigned
Filter f = (int n) => n < max;
max = 5;
DoWork(f);
}
приводит к возникновению ошибки времени компиляции, поскольку переменная max не является определенно присвоенной при объявлении анонимной функции. Пример:
delegate void D();
void F() {
int n;
D d = () => { n = 1; };
d();
// Error, n is not definitely assigned
Console.WriteLine(n);
}
также приводит к возникновению ошибки времени компилирования, поскольку присваивание для переменной n в анонимной функции не влияет на состояние определенного присваивания переменной n вне анонимной функции.
Ссылочные переменные
Ссылка на переменную представляет собой выражение, которое классифицируется как переменная. Ссылка на переменную указывает место хранения, к которому можно получить доступ как для извлечения текущего значения, так и для сохранения нового значения.
variable-reference:
expression
В C и C++ ссылка на переменную называется lvalue.
|
|
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!