Portál AbcLinuxu, 15. května 2025 00:26
Nový standard C++ ISO 2010 je k dispozici na stránkách open-std.org [PDF, 10,6 MiB].
Tiskni
Sdílej:
navíc si můžete být jistí, že co je v normě je závazné.coz u C++ a treba gcc tak uplne neplati, protoze gcc si dela vicemene co chce a zkompiluje i veci, ktere dle normy zkomilovat vubec nema
hlášení ohledně chyb bylo dost kryptické.Podle me jeden z duvodu proc sluna cast lidi co chce zacit s C++ zbabele prchne. Ukazte javistovi nejakou vypecenejsi hlasku z GCC a uvidite co vam na to rekne. For je v tom, ze na chyby v jave vetsinou pomuze aspon strycek google. Na nektery vejmysle GCC nepomuze ani svecena
Export šablon se dělá u kompilovaného jazyka parádně.Kdyby to bylo tak jednoduché, tak to implementuje víc než jeden kompilátor. Času na to bylo dost dlouho.
Už by měli vyhodit hlavně makra. Jsou hnus. I C (C99) podporuje inline funkcemakra jsou nahodou naprosto uzitecna vec a jsou situace, ktere neresi ani inline funkce ani templaty. vlastne, spis je skoda, ze v C maji makra jenom tak omezene schopnosti... napr. by se mi hodilo makro generujici dalsi makra (v rozumnych jazycich je to normalni)
chci tam funkci minor(size_t,size_t) pro získání "minor" matice, tak namě preprocesor začne jebat, že makro minor bere jeden argument. fakt super, vymejšlet jiný název.to je spis problem ,,jednoho/spolecneho namespacu'' nez tech maker
Už by měli vyhodit hlavně makra. Jsou hnus.Jakpak bych bez maker definoval toto:
#if defined __FILE__ && __LINE__
#define ohshit(code, message) throw Err(code, message, __FILE__, __LINE__)
#else
#define ohshit(code, message) throw Err(code, message)
#endif
Její největší část je převzatá z předchozí normy, kterou jsem četl celou.Chtěl bych si normu taky někdy přečíst, zkoušel jsem už začít, ale hodně se tam začalo odkazovat na nedefinované pojmy (sekce o lexikální analýze byla v pohodě, ale myslím už v sekci "Basic" začala používat pojmy definované až později). Jak se taková norma nejlépe čte? Od začátku do konce?
vim ~/.emacs
Mně jen zajímá jestli někdy vznikne nějaká konkurence C++, protože žádný konkurenční jazyk stejných vlastností neexistuje.
Takové ambice má jazyk D.
std::wstring
unicode řetězec (v kódování UCS-4), podobně je tomu i u řady jiných implementací. Přenositelný být nepotřebuje, protože má-li se někam přenášet, dělá se to přes stream a při zápisu dochází ke konverzi podle zvoleného locale (a stejně tak při čtení).
wstring je pouhé pole prvků typu wchar_t – nic jiného
wchar_t může být cokoli, může to být 16ti, ne 32ti bitová integer proměnná. může být signed i unsigned.
To je sice pravda, ale není to v rozporu s tím, co jsem napsal.
a konverze do 8mi bitových charsetů jsou doufám minulostí, já sám nic takového už roky nepoužívám
Já jsem snad o něčem takovém mluvil?
raději se zdržím dalších komentářů
Pokud je vám zatěžko přečíst si příspěvek, na který reagujete, bude lepší, když se zdržíte.
wchar_t (budu-li se držet C99), je implementačně závislý. Standard pouze požaduje, aby obsáhl všechny znaky, které daný systém v době překladu umí.
Například přeložíte-li program na systému, jehož standardní knihovna umí jen osmibitové locales, tak výsledný program může mít typ wchar_t široký osm bitů. Doinstalujete-li si podporu pro UTF-8 locales, a přeložíte-li program znovu, bude wchar_t (ve stavu dnešního Unicode) mít 32 bitů. Spustíte-li si první program na novém systému v UTF-8 locale, čtecí rutiny při převodu multibyte do wide charachter selžou, protože nedokážou reprezentovat tak široké znaky.
std::wstring
není unicode řetězece, protože jím nejen být může, ale často také je. (Jestli jsou nebo nejsou k dispozici specifické unicode funkce, tu nehraje roli.) Za druhé: ano, interní reprezentace std::wstring
není obecně přenositelná, ale to není problém, protože u tohoto typu se nepředpokládá, že by se v nativní podobě přenášel mezi platformami nebo i jen mezi různými procesy, a standardní mechanismy pro přenos překlad zajistí. Že nebudou fungovat u zmršených implementací, jejichž wchar_t
nemá dostatečný rozsah, to je celkem logické, ale je to chyba těch implementací, ne návrhu.
u gcc je std::wstring unicode řetězec (v kódování UCS-4)U mě v GCC je wchar_t 2B, tudíž UCS-4 z toho jen blbě vyždímete. A pokud použiju prefixu L"", nastrká tam UCS-2 "řetězec". Platí, co řekl pan Ponkrác.
wchar_t může být cokoli, může to být 16ti, ne 32ti bitová integer proměnná. může být signed i unsigned.
#include < string >
#include < iostream >
int main()
{
std::cout << sizeof(wchar_t) << std::endl;
}
#include <cstdint>
?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.