Bylo spuštěno hlasování o přednáškách a workshopech pro letošní Installfest, jenž proběhne o víkendu 28. a 29. března v Praze na Karlově náměstí 13.
Byla vydána (Mastodon, 𝕏) třetí RC verze GIMPu 3.2. Přehled novinek v oznámení o vydání. Podrobně v souboru NEWS na GitLabu.
Apple představil iPhone 17e a iPad Air s čipem M4.
Byla vydána verze 1.0 editoru kódů Gram. Jedná se o fork editoru Zed bez telemetrie a umělé inteligence.
Byla oznámena spolupráce GrapheneOS s Motorolou. Podrobnosti v tiskové zprávě. GrapheneOS (Wikpedie) je varianta Androidu zaměřující se na bezpečnost a soukromí.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.2.1. Přehled novinek v Changelogu.
Volí se dvě místa v Radě openSUSE. Seznamte se se čtyřmi kandidáty. Členové projektu openSUSE mohou hlasovat od 1. do 8. března. Výsledky budou oznámeny 9. března.
Společnost OpenAI uzavřela dohodu s americkým ministerstvem obrany o poskytování technologií umělé inteligence (AI) pro utajované sítě americké armády. Firma to oznámila několik hodin poté, co prezident Donald Trump nařídil vládě, aby přestala využívat služby společnosti Anthropic.
Technologická společnost Anthropic v noci na dnešek oznámila, že se obrátí na soud kvůli rozhodnutí ministerstva obrany označit ji za bezpečnostní riziko dodavatelského řetězce poté, co nevyhověla jeho požadavkům týkajícím se používání umělé inteligence (AI). Prezident Donald Trump krátce před tím uvedl, že nařídil federálním úřadům postupně ukončit využívání jejích AI technologií. Spor mezi firmou vyvíjející chatbot Claude a
… více »Zemřel Rob Grant, spolutvůrce kultovního sci-fi seriálu Červený trpaslík.
while (int a = getData()) {
// kód
}
for (int a = getData(); a; a = getData()) {
// kód
}
Nicméně tohle už v C++ validní není:
do (int a = getData()) {
// kód
} while ((a = getData()));
Takže nás to nutí psát ošklivé konstrukce jako třeba:
{
int a = getData();
do {
// kód
} while ((a = getData()));
}
Smyslem je pracovat uvnitř cyklu s hodnotou proměnné a, ale podmínku testovat až na jeho konci.
Přitom ale chceme mít rozsah platnosti proměnné omezen na daný cyklus.
Že by po podobné konstrukci C++ byla poptávka, můžeme soudit podle dotazů zde a zde.
Řešením může být tato obskurní knihovna.
A následný kód je najednou validní.
do (int a = getData()) {
// kód
} while ((a = getData()));
Důležité je, že tato knihovna neporuší původní syntaxi klíčového slova do v cyklu do-while.
Ještě dodám, že ty dvojité závorky jsou tam záměrně. Jinak by GCC vypsalo varování:
warning: suggest parentheses around assignment used as truth value [-Wparentheses]Pokud se vám takové konstrukce líbí, tak z tohohle a tohohle budete nadšeni.
Tiskni
Sdílej:
do {
...
} while( getData() );
případně, pokud bych chtěl ten výsledek, tak
int a;
do {
...
} while(( a=getData() ));
a definovaná, ale během první iterace nebude mít definovanou hodnotu!
Nicméně tohle už v C++ validní není:
do {
// kód
} while (int a = getData());
A k čemu je tato konstrukce dobrá? Proměnná "a" vznikne až v podmínce u while na konci bloku, takže se nemůže použít uvnitř, a zanikne při opuštění cyklu.
while (int a = getData()) {
// kód
}
Je moc uzitecna konstrukce, obdobne jako:
if (int a = getData()) {
...
}
A za tohle bych programatora zabil:
switch (int a = getData()) do default: {
// kód
} while ((a = getData()));
Blog prispevek naprosto onicem. C++ ma milion dalsich vlastnosti, ktere by si zaslouzili hate, ale tohle zrovna ne.
Nicméně tohle už v C++ validní není:
do (int a = getData()) {
// kód
} while ((a = getData()));
Jen pro info. Toto se také nepřeloží :D.
#include <iostream>
#include <functional>
int glob = 10;
template <typename TData>
void do_loop(const std::function<TData ()> &getter, const std::function<void (TData&)> &worker)
{
TData data = getter();
do {
worker(data);
} while ((data = getter()));
}
int main()
{
int i = 65;
do_loop<int>([&]() { return glob--;}, [&](int &d){ std::cout << i + d << "\n"; });
return 0;
}
Jinak ten zápis s dvojím voláním getData() mi přijde úplně normální...
Obskurní konstrukce? To by se to taky mohlo napsat takto:
Jinak ten zápis s dvojím voláním getData() mi přijde úplně normální...
Myslím tu třetí možnost s do-while zabaleným scopu.