- 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");
}
внеочередной говнокод для работы с андефами. А ваш говно-компилятор умеет так (особенно С и С++)
гы гы
ASD_77 21.05.2021 12:44 # +1
Soul_re@ver 21.05.2021 14:17 # +1
Ня?
http://coliru.stacked-crooked.com/a/b64e8860f1fd88b2
ASD_77 21.05.2021 15:59 # 0
Soul_re@ver 21.05.2021 16:05 # +2
Soul_re@ver 21.05.2021 16:30 # +2
MAKAKA 21.05.2021 16:36 # 0
Кстати, как он работает? Занимает в памяти sizeof(pituh) плюс флажок "petuh_exists", и там в питухе либо настоящий питух, либо мусор?
PolinaAksenova 21.05.2021 16:40 # 0
MAKAKA 21.05.2021 16:46 # 0
> throw nyh_value_error();
зачем мне лишняя проверка?
Пусть пользователь проверяет has_value сам, иначе UB
Я так примерно и представлял вощем, спасибо)
В C# давным давно завезли Nullable (он же "?"), позволющий value type быть нулом.
Но я боюсь, что там тупо кладут его в кучу и заменяют на указатель
PolinaAksenova 21.05.2021 16:51 # 0
MAKAKA 21.05.2021 21:58 # 0
Coq 21.05.2021 22:30 # 0
Soul_re@ver 22.05.2021 11:46 # 0
поэтому bool has_value объявить нельзя — первый же #define has_value это сломает. Поэтому разработчикам библиотек и приходится использовать имена _Петух или __петух
gologub 22.05.2021 14:36 # 0
https://www.gannett-cdn.com/presto/2021/05/20/PSTG/a7347fb5-7adb-46de-b5e7-ee47ab8d08fb-AP21139664333434.jpg
booratihno 22.05.2021 14:43 # 0
Или они про сишную стандартную либу?
Soul_re@ver 22.05.2021 14:54 # +1
booratihno 22.05.2021 14:55 # 0
MAKAKA 22.05.2021 16:30 # 0
Извинись!
bootcamp_dropout 22.05.2021 17:03 # 0
MAKAKA 22.05.2021 17:07 # 0
gologub 22.05.2021 18:37 # +3
Нашi усi пишуть на Си
MAKAKA 22.05.2021 21:53 # +1
Это экспромпт?
gologub 22.05.2021 22:09 # 0
eukaryote 22.05.2021 08:11 # +1
> Но я боюсь, что там тупо кладут его в кучу и заменяют на указатель
Nullable — это на самом деле структура, а структура — value type. Когда наллаблу присваивается null, это на самом деле значит, что это Nullable<T> (где T — value-type), у которого HasValue=false, а при попытке получить Value выбрасывается эксепшен. Хранится ли он в стеке или в куче — это уже отдельный вопрос, как и для любого другого value type.
booratihno 22.05.2021 12:47 # +1
Всё как в С+
А вот в джавке бы так не получилось, бо метапррограммирования нету(
Soul_re@ver 22.05.2021 12:52 # +1
booratihno 22.05.2021 12:57 # 0
Забавно, что в C# они не забоялись, и сделали генерики ближе к шаблонам: Petuh<int> это реальный класс с полем int, а не с полем Object
Soul_re@ver 21.05.2021 16:44 # 0
ASD_77 21.05.2021 16:00 # +1
JloJle4Ka 21.05.2021 14:26 # +1
> особенно С
ASD_77 21.05.2021 16:00 # +1