4 глава fix 2
This commit is contained in:
parent
50debdf57d
commit
916940b95f
|
@ -1113,7 +1113,7 @@ void main()
|
||||||
|
|
||||||
Кодировка литерала определяется контекстом, в котором этот литерал используется. В предыдущем примере компилятор преобразует строковый литерал, без какой-либо обработки во время исполнения программы, из кодировки UTF-8 в кодировку UTF-16, а потом в кодировку UTF-32 (соответствующие типам `string`, `wstring` и `dstring`), хотя написание литералов во всех трех случаях одинаково. Если требуемая кодировка литерала не может быть однозначно определена, добавьте к нему суффикс `c`, `w` или `d` (например, `"как_здесь"d`): строка будет преобразована в кодировку UTF-8, UTF-16 или UTF-32 соответственно (см. раздел 2.2.5.2).
|
Кодировка литерала определяется контекстом, в котором этот литерал используется. В предыдущем примере компилятор преобразует строковый литерал, без какой-либо обработки во время исполнения программы, из кодировки UTF-8 в кодировку UTF-16, а потом в кодировку UTF-32 (соответствующие типам `string`, `wstring` и `dstring`), хотя написание литералов во всех трех случаях одинаково. Если требуемая кодировка литерала не может быть однозначно определена, добавьте к нему суффикс `c`, `w` или `d` (например, `"как_здесь"d`): строка будет преобразована в кодировку UTF-8, UTF-16 или UTF-32 соответственно (см. раздел 2.2.5.2).
|
||||||
|
|
||||||
[В начало ⮍](#4-5-4-массивы-знаков--бонусы--строки) [Наверх ⮍](#4-массивы-ассоциативные-массивы-и-строки)
|
[В начало ⮍](#4-5-4-массивы-знаков-бонусы-строки) [Наверх ⮍](#4-массивы-ассоциативные-массивы-и-строки)
|
||||||
|
|
||||||
#### 4.5.4.1. Цикл foreach применительно к строкам
|
#### 4.5.4.1. Цикл foreach применительно к строкам
|
||||||
|
|
||||||
|
@ -1230,7 +1230,7 @@ y += 100; // Хм...
|
||||||
|
|
||||||
Существует «урезанная» безопасная версия D, известная как SafeD (см. главу 11), также есть флаг компилятора, установка которого включает проверку принадлежности используемых в программе инструкций и типов данных этому безопасному подмножеству средств языка. Естественно, в безопасном D (SafeD) запрещено большинство операций с указателями. Встроенные массивы – это важное средство, позволяющее создавать мощные, выразительные программы на SafeD.
|
Существует «урезанная» безопасная версия D, известная как SafeD (см. главу 11), также есть флаг компилятора, установка которого включает проверку принадлежности используемых в программе инструкций и типов данных этому безопасному подмножеству средств языка. Естественно, в безопасном D (SafeD) запрещено большинство операций с указателями. Встроенные массивы – это важное средство, позволяющее создавать мощные, выразительные программы на SafeD.
|
||||||
|
|
||||||
[В начало ⮍](#4-6-опасный-собрат-массива-–-указатель) [Наверх ⮍](#4-массивы-ассоциативные-массивы-и-строки)
|
[В начало ⮍](#4-6-опасный-собрат-массива-указатель) [Наверх ⮍](#4-массивы-ассоциативные-массивы-и-строки)
|
||||||
|
|
||||||
## 4.7. Итоги и справочник
|
## 4.7. Итоги и справочник
|
||||||
|
|
||||||
|
@ -1240,64 +1240,64 @@ y += 100; // Хм...
|
||||||
|
|
||||||
|Выражение|Тип|Описание|
|
|Выражение|Тип|Описание|
|
||||||
|-|-|-|
|
|-|-|-|
|
||||||
|`new T[n]`|`T[]`|Создает массив ([раздел 4.1](../chapter-4-1/))|
|
|`new T[n]`|`T[]`|Создает массив ()|
|
||||||
|`[t1,t2, ..., tk]`|`T[]`|Литерал массива; `T` определяется по типу `t1` (разделы [2.2.6](../../2/chapter-2-2-6/) и [4.1](../chapter-4-1/))|
|
|`[t1,t2, ..., tk]`|`T[]`|Литерал массива; `T` определяется по типу `t1` ()|
|
||||||
|`a = b`|`T[]`|Присваивает один массив другому ([раздел 4.1.4](../chapter-4-1-4/))|
|
|`a = b`|`T[]`|Присваивает один массив другому ()|
|
||||||
|`a[<в>]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в выражении `<в>` заменяется на `a.length`, `<в>` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `<в> < a.length`) ([раздел 4.1](../chapter-4-1/))|
|
|`a[<в>]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в выражении `<в>` заменяется на `a.length`, `<в>` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `<в> < a.length`) ()|
|
||||||
|`a[<в1> .. <в2>]`|`T[]`|Получает срез массива `a` (знак `$` в `<в1>` и `<в2>` заменяется на `a.length`, `<в1>` и `<в2>` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `<в1> <= <в2> && <в2> <= a.length`) ([раздел 4.1.3](../chapter-4-1-3/))|
|
|`a[<в1> .. <в2>]`|`T[]`|Получает срез массива `a` (знак `$` в `<в1>` и `<в2>` заменяется на `a.length`, `<в1>` и `<в2>` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `<в1> <= <в2> && <в2> <= a.length`) ()|
|
||||||
|`a[]`|`T[]`|Поэлементная операция ([раздел 4.1.7](../chapter-4-1-7/)) или альтернативное написание выражения `a[0 .. $]`, возвращающего содержимое всего массива|
|
|`a[]`|`T[]`|Поэлементная операция () или альтернативное написание выражения `a[0 .. $]`, возвращающего содержимое всего массива|
|
||||||
|`a.dup`|`T[]`|Получает дубликат массива ([раздел 4.1](../chapter-4-1/))|
|
|`a.dup`|`T[]`|Получает дубликат массива ()|
|
||||||
|`a.length`|`размер_t`|Читает длину массива ([раздел 4.1.10](../chapter-4-1-10/))|
|
|`a.length`|`размер_t`|Читает длину массива ()|
|
||||||
|`a.length = n`|`размер_t`|Изменяет длину массива ([раздел 4.1.1](../chapter-4-1-1/))|
|
|`a.length = n`|`размер_t`|Изменяет длину массива ()|
|
||||||
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу (разделы [4.1.5](../chapter-4-1-5/) и [2.3.4.3](../../2/chapter-2-3-4-3/))|
|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу ()|
|
||||||
|`a !is b`|`bool`|То же, что `!(a is b)`|
|
|`a !is b`|`bool`|То же, что `!(a is b)`|
|
||||||
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство ([раздел 4.1.5](../chapter-4-1-5/))|
|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство ()|
|
||||||
|`a != b`|`bool`|То же, что `!(a == b)`|
|
|`a != b`|`bool`|То же, что `!(a == b)`|
|
||||||
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение ([раздел 4.1.6](../chapter-4-1-6/))|
|
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение ()|
|
||||||
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив ([раздел 4.1.6](../chapter-4-1-6/))|
|
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив ()|
|
||||||
|`a ~ b`|`T[]`|Конкатенирует два массива ([раздел 4.1.6](../chapter-4-1-6/))|
|
|`a ~ b`|`T[]`|Конкатенирует два массива ()|
|
||||||
|`a ~= t`|`T[]`|Присоединяет элемент к массиву ([раздел 4.1.6](../chapter-4-1-6/))|
|
|`a ~= t`|`T[]`|Присоединяет элемент к массиву ()|
|
||||||
|`a ~= b`|`T[]`|Присоединяет один массив к другому ([раздел 4.1.6](../chapter-4-1-6/))|
|
|`a ~= b`|`T[]`|Присоединяет один массив к другому ()|
|
||||||
|`a.ptr`|`T*`|Возвращает адрес первого элемента массива `a` (небезопасная операция) ([раздел 4.6](../chapter-4-6/))|
|
|`a.ptr`|`T*`|Возвращает адрес первого элемента массива `a` (небезопасная операция) ()|
|
||||||
|
|
||||||
*Таблица 4.4. Операции над массивами фиксированной длины (`a` и `b` – два значения типа `T[]`; `t`, `t1`, ..., `tk` – значения типа `T`; `n` – значение, приводимое к типу `размер_t`)*
|
*Таблица 4.4. Операции над массивами фиксированной длины (`a` и `b` – два значения типа `T[]`; `t`, `t1`, ..., `tk` – значения типа `T`; `n` – значение, приводимое к типу `размер_t`)*
|
||||||
|
|
||||||
|Выражение|Тип|Описание|
|
|Выражение|Тип|Описание|
|
||||||
|-|-|-|
|
|-|-|-|
|
||||||
|`[t1, ..., tk]`|`T[k]`|Литерал массива, но только если тип `T[k]` запрошен явно; `T` определяется по типу `t1` (разделы [2.2.6](../../2/chapter-2-2-6/) и [4.1](../chapter-4-1/))|
|
|`[t1, ..., tk]`|`T[k]`|Литерал массива, но только если тип `T[k]` запрошен явно; `T` определяется по типу `t1` ()|
|
||||||
|`a = b`|`ref T[n]`|Копирует содержимое одного массива в другой ([раздел 4.2.4](../chapter-4-2-4/))|
|
|`a = b`|`ref T[n]`|Копирует содержимое одного массива в другой ()|
|
||||||
|`a[<в>]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в `<в>` заменяется на `a.length`, `<в>` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `<в> < a.length`) ([раздел 4.1](../chapter-4-1/))|
|
|`a[<в>]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в `<в>` заменяется на `a.length`, `<в>` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `<в> < a.length`) ()|
|
||||||
|`a[<в1> .. <в2>]`|`T[]/T[k]`|Получает срез массива `a` (символ `$` в `<в1>` и `<в2>` заменяется на `a.length`, `<в1>` и `<в2>` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `<в1> <= <в2> && <в2> <= a.length`) ([раздел 4.2.3](../chapter-4-2-3/))|
|
|`a[<в1> .. <в2>]`|`T[]/T[k]`|Получает срез массива `a` (символ `$` в `<в1>` и `<в2>` заменяется на `a.length`, `<в1>` и `<в2>` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `<в1> <= <в2> && <в2> <= a.length`) ())|
|
||||||
|`a[]`|`T[]`|Поэлементная операция ([раздел 4.1.7](../chapter-4-1-7/)) или приведение `a` (массива фиксированной длины) к типу динамического массива, то же, что и `a[0 .. $]`|
|
|`a[]`|`T[]`|Поэлементная операция () или приведение `a` (массива фиксированной длины) к типу динамического массива, то же, что и `a[0 .. $]`|
|
||||||
|`a.dup`|`T[]`|Получает дубликат массива ([раздел 4.2.4](../chapter-4-2-4/))|
|
|`a.dup`|`T[]`|Получает дубликат массива ()|
|
||||||
|`a.length`|`размер_t`|Читает длину массива ([раздел 4.2.1](../chapter-4-2-1/))|
|
|`a.length`|`размер_t`|Читает длину массива ()|
|
||||||
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу (разделы [4.2.5](../chapter-4-2-5/) и [2.3.4.3](../../2/chapter-2-3-4-3/))|
|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу ()|
|
||||||
|`a !is b`|`bool`|То же, что и `!(a is b)`|
|
|`a !is b`|`bool`|То же, что и `!(a is b)`|
|
||||||
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство (разделы [4.2.5](../chapter-4-2-5/) и [2.3.12](../../2/chapter-2-3-12-1/))|
|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство ()|
|
||||||
|`a != b`|`bool`|То же, что и `!(a == b)`|
|
|`a != b`|`bool`|То же, что и `!(a == b)`|
|
||||||
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение ([раздел 4.2.6](../chapter-4-2-6/))|
|
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение ()|
|
||||||
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив ([раздел 4.2.6](../chapter-4-2-6/))|
|
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив ()|
|
||||||
|`a ~ b`|`T[]`|Конкатенирует два массива ([раздел 4.2.6](../chapter-4-2-6/))|
|
|`a ~ b`|`T[]`|Конкатенирует два массива ()|
|
||||||
|`a.ptr`|`T*`|Возвращает адрес первого элемента массива `a` (небезопасная операция)|
|
|`a.ptr`|`T*`|Возвращает адрес первого элемента массива `a` (небезопасная операция)|
|
||||||
|
|
||||||
*Таблица 4.5. Операции над ассоциативными массивами (`a` и `b` – два значения типа `V[K]`; `k`, `k1`, ..., `ki` – значения типа `K`; `v`, `v1`, ..., `vk` – значения типа `V`)*
|
*Таблица 4.5. Операции над ассоциативными массивами (`a` и `b` – два значения типа `V[K]`; `k`, `k1`, ..., `ki` – значения типа `K`; `v`, `v1`, ..., `vk` – значения типа `V`)*
|
||||||
|
|
||||||
|Выражение|Тип|Описание|
|
|Выражение|Тип|Описание|
|
||||||
|-|-|-|
|
|-|-|-|
|
||||||
|`[t1:v1, ..., ti:vi]`|`V[K]`|Литерал ассоциативного массива; `K` определяется по типу `k1`, а `V` – по типу `v1` (разделы [2.2.6](../../2/chapter-2-2-6/) и [4.4](../chapter-4-4/))|
|
|`[t1:v1, ..., ti:vi]`|`V[K]`|Литерал ассоциативного массива; `K` определяется по типу `k1`, а `V` – по типу `v1` ()|
|
||||||
|`a = b`|`V[K]`|Присваивает ассоциативный массив `b` переменной a типа «ассоциативный массив» ([раздел 4.4.3](../chapter-4-4-3/))|
|
|`a = b`|`V[K]`|Присваивает ассоциативный массив `b` переменной a типа «ассоциативный массив» ()|
|
||||||
|`a[k]`|`V`|Предоставляет доступ к элементу по индексу (если ключ `k` не найден, возникает исключение) ([раздел 4.4.2](../chapter-4-4-2/))|
|
|`a[k]`|`V`|Предоставляет доступ к элементу по индексу (если ключ `k` не найден, возникает исключение) ()|
|
||||||
|`a[k] = v`|`V`|Ставит в соответствие ключу `k` значение `v` (переопределяет предыдущее соответствие, если оно уже было назначено) ([раздел 4.4.2](../chapter-4-4-2/))|
|
|`a[k] = v`|`V`|Ставит в соответствие ключу `k` значение `v` (переопределяет предыдущее соответствие, если оно уже было назначено) ()|
|
||||||
|`k in a`|`V*`|Ищет `k` в `a`, возвращает `null`, если не находит, иначе – указатель на значение, ассоциированное с `k` ([раздел 4.4.2](../chapter-4-4-2/))|
|
|`k in a`|`V*`|Ищет `k` в `a`, возвращает `null`, если не находит, иначе – указатель на значение, ассоциированное с `k` ()|
|
||||||
|`k !in a`|`bool`|То же, что и `!(k in a)`|
|
|`k !in a`|`bool`|То же, что и `!(k in a)`|
|
||||||
|`a.length`|`размер_t`|Читает значение, соответствующее числу элементов в `a` ([раздел 4.4.1](../chapter-4-4-1/))|
|
|`a.length`|`размер_t`|Читает значение, соответствующее числу элементов в `a` ()|
|
||||||
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу (разделы [4.4.4](../chapter-4-4-4/) и [2.3.4.3](../../2/chapter-2-3-4-3/))|
|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу ()|
|
||||||
|`a !is b`|`bool`|То же, что и `!(a is b)`|
|
|`a !is b`|`bool`|То же, что и `!(a is b)`|
|
||||||
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство (разделы [4.4.4](../chapter-4-4-4/) и [2.3.12](../../2/chapter-2-3-12-1/))|
|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство ()|
|
||||||
|`a != b`|`bool`|То же, что и `!(a == b)`|
|
|`a != b`|`bool`|То же, что и `!(a == b)`|
|
||||||
|`a.remove(k)`|`bool`|Удаляет пару с ключом `k`, если такая есть; возвращает `true`, если и только если ключ `k` присутствовал в `a` ([раздел 4.4.5](../chapter-4-4-5/))|
|
|`a.remove(k)`|`bool`|Удаляет пару с ключом `k`, если такая есть; возвращает `true`, если и только если ключ `k` присутствовал в `a` ()|
|
||||||
|`a.dup`|`V[K]`|Создает дубликат ассоциативного массива `a` ([раздел 4.4.3](../chapter-4-4-3/))|
|
|`a.dup`|`V[K]`|Создает дубликат ассоциативного массива `a` ()|
|
||||||
|`a.get(k, v)`|`V`|Возвращает значение из `a`, соответствующее ключу `k`; по умолчанию возвращается значение `v` ([раздел 4.4.2](../chapter-4-4-2/))|
|
|`a.get(k, v)`|`V`|Возвращает значение из `a`, соответствующее ключу `k`; по умолчанию возвращается значение `v` ()|
|
||||||
|`a.byKey()`|`int delegate(int delegate(ref K))`|Возвращает делегат, пригодный для использования в цикле `foreach` для итерации по ключам|
|
|`a.byKey()`|`int delegate(int delegate(ref K))`|Возвращает делегат, пригодный для использования в цикле `foreach` для итерации по ключам|
|
||||||
|`a.byValue()`|`int delegate(int delegate(ref V))`|Возвращает делегат, пригодный для использования в цикле `foreach` для итерации по значениям|
|
|`a.byValue()`|`int delegate(int delegate(ref V))`|Возвращает делегат, пригодный для использования в цикле `foreach` для итерации по значениям|
|
||||||
|
|
||||||
|
@ -1308,6 +1308,4 @@ y += 100; // Хм...
|
||||||
[^3]: При этом для массива типа `V[K]` передаваемые ключи должны иметь тип `immutable(K)` или неявно приводимый к нему. Это требование введено для того, чтобы в процессе работы программы значение ключа не могло быть изменено косвенным образом, что повлекло бы нарушение структуры ассоциативного массива. – *Прим. науч. ред.*
|
[^3]: При этом для массива типа `V[K]` передаваемые ключи должны иметь тип `immutable(K)` или неявно приводимый к нему. Это требование введено для того, чтобы в процессе работы программы значение ключа не могло быть изменено косвенным образом, что повлекло бы нарушение структуры ассоциативного массива. – *Прим. науч. ред.*
|
||||||
[^4]: Как уже говорилось, оператор `in` возвращает указатель на элемент, соответствующий ключу, или `null`, если такой ключ отсутствует в массиве. – *Прим. науч. ред.*
|
[^4]: Как уже говорилось, оператор `in` возвращает указатель на элемент, соответствующий ключу, или `null`, если такой ключ отсутствует в массиве. – *Прим. науч. ред.*
|
||||||
[^5]: Кембрийский взрыв – неожиданное появление в раннекембрийских отложениях окаменелостей представителей многих подразделений животного царства на фоне отсутствия их окаменелостей или окаменелостей их предков в докембрийских отложениях. – *Прим. пер.*
|
[^5]: Кембрийский взрыв – неожиданное появление в раннекембрийских отложениях окаменелостей представителей многих подразделений животного царства на фоне отсутствия их окаменелостей или окаменелостей их предков в докембрийских отложениях. – *Прим. пер.*
|
||||||
[^6]: В архитектуре x86 тип указатель размером в 4 байта соответствует двойно
|
[^6]: В архитектуре x86 тип указатель размером в 4 байта соответствует двойному слову (`DW`), а слову соответствует тип `short` размером 2 байта. – *Прим. науч. ред.*
|
||||||
му слову (DW), а слову соответствует тип short размером 2 байта. – Прим. на
|
|
||||||
уч. ред.
|
|
||||||
|
|
Loading…
Reference in New Issue