- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
function t_undef(s?: string)
{
assert((s == undefined) == true, "is not undefined")
assert((s != undefined) == false, "is undefined")
assert((s > undefined) == false, "not >");
assert((s < undefined) == false, "not <");
assert((s >= undefined) == true, "not >=");
assert((s <= undefined) == true, "not <=");
}
function t_val(s?: string)
{
assert((s == undefined) == false, "is undefined")
assert((s != undefined) == true, "is not undefined")
assert((s > undefined) == true, ">");
assert((s < undefined) == false, "<");
assert((s >= undefined) == true, ">=");
assert((s <= undefined) == false, "<=");
}
function f(s?: string)
{
print(s == undefined, s != undefined, s > undefined, s < undefined, s >= undefined, s <= undefined);
}
function main() {
f();
t_undef();
f("asd");
t_val("asd");
}
внеочередной говнокод для работы с андефами. А ваш говно-компилятор умеет так (особенно С и С++)
гы гы
Ня?
http://coliru.stacked-crooked.com/a/b64e8860f1fd88b2
Кстати, как он работает? Занимает в памяти sizeof(pituh) плюс флажок "petuh_exists", и там в питухе либо настоящий питух, либо мусор?
> throw nyh_value_error();
зачем мне лишняя проверка?
Пусть пользователь проверяет has_value сам, иначе UB
Я так примерно и представлял вощем, спасибо)
В C# давным давно завезли Nullable (он же "?"), позволющий value type быть нулом.
Но я боюсь, что там тупо кладут его в кучу и заменяют на указатель
поэтому bool has_value объявить нельзя — первый же #define has_value это сломает. Поэтому разработчикам библиотек и приходится использовать имена _Петух или __петух
https://www.gannett-cdn.com/presto/2021/05/20/PSTG/a7347fb5-7adb-46de-b5e7-ee47ab8d08fb-AP21139664333434.jpg
Или они про сишную стандартную либу?
Извинись!
Нашi усi пишуть на Си
Это экспромпт?
> Но я боюсь, что там тупо кладут его в кучу и заменяют на указатель
Nullable — это на самом деле структура, а структура — value type. Когда наллаблу присваивается null, это на самом деле значит, что это Nullable<T> (где T — value-type), у которого HasValue=false, а при попытке получить Value выбрасывается эксепшен. Хранится ли он в стеке или в куче — это уже отдельный вопрос, как и для любого другого value type.
Всё как в С+
А вот в джавке бы так не получилось, бо метапррограммирования нету(
Забавно, что в C# они не забоялись, и сделали генерики ближе к шаблонам: Petuh<int> это реальный класс с полем int, а не с полем Object
> особенно С