2017-01-29 11 views
10

Wiem, że jest to stara funkcja, ale czyta się ją pod numerem user defined literals, np.Dlaczego nazwy nie-podkreślenia są zarezerwowane dla implementacji dla UDL, a nie na odwrót?

return_t operator "" _a(long); // Literal operator for user-defined INTEGRAL literal 

I przypomniał, że wymagana jest

wiodącym podkreślenia. (Jedynie biblioteka standardowa wolno definiować literały bez podkreślenia.) (A)

To wydaje się złamać wzór od tej pory realizacja pracował z nazwiskami underscorey i pozostawił nam te dobre, na przykład zastrzeżone do realizacji są nazwy, które

  1. zawierają podwójne podkreślenia
  2. zaczynają się od podkreślenia, po którym następuje litera

Ponadto cytat (A) jest nieco niebezpieczny w obecności reguły (2). Dlaczego więc niespójność?

+3

Dzięki temu możemy uzyskać "naturalne" wyglądające sufiksy w standardowej bibliotece i pozostawić wyraźnie zdefiniowane przez użytkownika przyrostki jako takie. –

Odpowiedz

9

Zanim pomysł literałów zdefiniowany przez użytkownika został dodany do języka, wszystkie standardowe literały wykorzystywały sekwencje, które nie zaczynają się od podkreślenia, takie jak 123L dla literału o numerze . Aby zachować spójność, standardowe literały otrzymują przestrzeń nazw bez specjalnego prefiksu, a nazwy UDL są od nich odróżniane za pomocą _.