C++ 14 zawiera standardowe zdefiniowane literały, między innymi, std::string
i różne czasy z nagłówka <chrono>
.Dlaczego domyślnie nie są zdefiniowane w C++ 14 literały w globalnej przestrzeni nazw?
Aby z nich skorzystać, musisz powiedzieć using namespace std::literals;
(lub pewną odmianę zależnie od tego, które dokładnie literały chcesz, ponieważ znajdują się w różnych wbudowanych przestrzeniach nazw).
Wszystko to jest dobre, ale jestem ciekawy, dlaczego wymagana jest deklaracja using
. Listy UDL bez wiodącego podkreślenia są zarezerwowane dla implementacji, więc nie ma możliwości, aby "hello world"s
mogło kiedykolwiek oznaczać coś innego w programie zgodnym z normami.
Dlaczego więc nie jest wystarczająca #include <string>
, aby dosłowna funkcja konwersji znalazła się w zakresie? Dlaczego muszę wyraźnie uwzględnić literalną przestrzeń nazw?
EDIT:N3531 jest najnowsza wersja projektu udało mi się znaleźć - niestety nie dyskutować motywację do oddania rzeczy w przestrzeni nazw, ale tylko mówi:
Można podsumować wymagań [portlandzkiego] dyskusji w sposób następujący:
- wykorzystanie przestrzeni nazw rolki dla (grupy pokrewne) operatora (ów) UDL
Prawdopodobnie z tego samego powodu zdefiniowane przez użytkownika literały muszą zaczynać się od '_': [zgodność z przodu] (http://en.wikipedia.org/wiki/Forward_compatibility). Przewidują one dodanie większej ilości literałów w pewnym momencie w przyszłości i wyobrażam sobie, że umieszczają je w różnych przestrzeniach nazw w celu uniknięcia konfliktów nazw. – Cornstalks
@ Zamknij wyborcę: Wątpię, czy to jest oparte na opiniach. Komitet normalizacyjny podjął decyzję. Pyta * dlaczego * podjęli decyzję, którą podjęli. Które nie opiera się na opinii.Opiera się na historycznych dyskusjach i decyzjach w ramach komisji, które są faktem. – Cornstalks
"UDL bez wiodącego podkreślenia są zarezerwowane dla implementacji" Gdzie iw jakiej wersji? –