Hvorfor må skilletegn rå strenger være under 16 tegn?

stemmer
11

Følgende program ikke kompilere:

#include <iostream>

int main() {
    std::cout << RRAW_STRING_LITERAL(
        hello
        world
        )RAW_STRING_LITERAL;
}

feil: raw string delimiter longer than 16 characters .

Hvorfor er det en begrensning lengde pålagt rå streng skilletegn?

Publisert på 04/08/2015 klokken 19:04
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Standarden angir at:

En streng-bokstavelig som har en R i prefikset er en rå strenglitteral. D-char-sekvens som tjener som et skilletegn. Det avsluttende D-charsequence av en rå-streng er den samme sekvens av tegn som den første D-charsequence. En D-char-sekvens skal være på maksimalt 16 tegn

http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4527.pdf § 2.13,5 side 28

Ingen grunn er gitt i standarden, men for meg, dette ser ut som helt tilfeldig grense som det skal gjøre absolutt ingen forskjell hva delimiter er.

Svarte 04/08/2015 kl. 19:22
kilden bruker

stemmer
10

Den tidligste forslaget jeg kan finne for rå strenger er N2146 ved Beman Dawes. Den inneholder teksten:

Den maksimale lengde av d-char-sekvens , skal være 16 tegn.

Dette synes å være en vilkårlig grense pålagt av forfatteren, som sannsynligvis besluttet 16 tegn var tilstrekkelig for å skape en entydig delimiter sekvens i alle tilfeller.

Forslaget sier også

Det avsluttende d-char-sekvens av en rå strengliteral skal være den samme sekvens av tegn som den første D-char-sekvens

Så en konform implementering må buffer og behandle d-char-sekvens for å sikre at to sekvenser match. Fravær av noen begrensning på den d-char-sekvens ville unødig legge til kompleksiteten for gjennomføring av funksjonen.

Svarte 04/08/2015 kl. 19:35
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more