(лево ИЛИ право) ИЛИ (верх ИЛИ низ)
// Левое ИЛИ правое значение.
type OffsetHorizontal =
| { left: number; right?: never; }
| { right: number; left?: never; }
// Верхнее ИЛИ нижнее значение.
type OffsetVertical =
| { top: number; bottom?: never; }
| { bottom: number; top?: never; }
// Горизонтальные значения, с запретом использования с вертикальными.
type OffsetHorizontalOnly = OffsetHorizontal & {
top?: never;
bottom?: never;
}
// Вертикальные значения, с запретом использования с горизонтальными.
type OffsetVerticalOnly = OffsetVertical & {
left?: never;
right?: never;
}
// OffsetHorizontalOnly ИЛИ OffsetVerticalOnly.
type Offset = OffsetHorizontalOnly | OffsetVerticalOnly;
// Верно:
// { left: 100 }
// { right: 100 }
// { top: 100 }
// { bottom: 100 }
// Неверно:
// { left: 100, right: 100 }
// { top: 100, bottom: 100 }
// { left: 100, top: 100 }
// { right: 100, top: 100 }
// { left: 100, bottom: 100 }
// { right: 100, bottom: 100 }
// Левое ИЛИ правое значение.
type OffsetHorizontal =
| { left: number; right?: never; }
| { right: number; left?: never; }
// Верхнее ИЛИ нижнее значение.
type OffsetVertical =
| { top: number; bottom?: never; }
| { bottom: number; top?: never; }
// OffsetHorizontal И/ИЛИ OffsetHorizontal.
type Offset =
| OffsetHorizontal
| OffsetVertical
| (OffsetHorizontal & OffsetVertical);
// Верно:
// { left: 100 }
// { right: 100 }
// { top: 100 }
// { bottom: 100 }
// { left: 100, top: 100 }
// { right: 100, top: 100 }
// { left: 100, bottom: 100 }
// { right: 100, bottom: 100 }
// Неверно:
// { left: 100, right: 100 }
// { top: 100, bottom: 100 }
typename std::add_lvalue_reference<T>::type operator*() const
void foo(const std::unique_ptr<const int>& ptr) {
if (ptr) {
*ptr += 5; // Ошибка компиляции.
std::cout << *ptr;
}
}
int main() {
std::unique_ptr<const int> ptr = std::make_unique<const int>(5);
foo(ptr);
}
void foo(const std::unique_ptr<const int> ptr) {
}
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(5);
foo(std::move(ptr));
}
открыл файл
nano /path/to/file
)? Если да, то внизу nano имеются подсказки по горячим клавишам:ctrl + o
- сохранить, редактор спросит имя файла для записи, если нужно просто сохранить - ничего не меняем и жмем enter.ctrl + x
- выйти из редактора, если имеются не сохраненные данные, то редактор так же предложит их сохранить.:wq
(записать и выйти).Подключался через mobaxterm
Заказал плату на али
sizeof(int) >= sizeof(short) >= sizeof(char) и т.п.
long int
все сложнее и действительно зависит от ABI. Т.е. даже на одной платформе но на разных компиляторах размер может быть разным. Например, сравните размеры типов в микрософтовском компиляторе и в mingw64 под 64 битной виндой на одном и том же компе.long long int
.
Какая-то чушь получается, люди называют вещи как им хочется и путают других.
- Это хорошо иллюстрируют функции, технически параметрами называются элементы в скобках при определении fn f(x: u8), а аргументами элементы в скобках при вызове f(255);, однако люди используют их взаимозаменяемо.
Объявление (Declaration) - вводит имя переменной в область видимости.
Связывание (Binding) — связывает имя с чем-то (значением, шаблоном, параметром).
let x: u8 = 123; // можно трактовать по разному: связывание, инициализация, определение