2015-08-04 15 views
11

Il seguente programma non viene compilato:Perché i delimitatori di stringhe di stringa non formattate devono essere inferiori a 16 caratteri?

#include <iostream> 

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

errore:raw string delimiter longer than 16 characters.

Perché è presente una limitazione della lunghezza imposta sui delimitatori di stringhe raw?

+1

Pensi che non ci dovrebbe essere? –

+0

La scelta sembra arbitraria dai documenti di proposta pertinenti, ma lascerò rispondere a qualcun altro. –

+0

Questo potrebbe essere specifico per l'implementazione. Quale compilatore stai usando? Quale sistema operativo? – ventsyv

risposta

10

La prima proposta che riesco a trovare per le stringhe di stringa originali è N2146 di Beman Dawes. Esso contiene il testo:

The maximum length of d-char-sequence shall be 16 characters.

Questo sembra essere un limite arbitrario imposto dall'autore, che probabilmente ha deciso 16 caratteri erano sufficienti per la creazione di una sequenza di delimitazione univoca in tutti i casi.

La proposta stabilisce inoltre

The terminating d-char-sequence of a raw string literal shall be the same sequence of characters as the initial d-char-sequence

Quindi un conforme attuazione deve tampone ed elaborare il d-char-sequenza per garantire la partita due sequenze. L'assenza di qualsiasi limite sulla sequenza di d-char aggiungerebbe inutilmente alla complessità dell'implementazione della funzione.

1

La norma specifica che:

A string-literal that has an R in the prefix is a raw string literal. The d-char-sequence serves as a delimiter. The terminating d-char-sequence of a raw-string is the same sequence of characters as the initial d-charsequence. A d-char-sequence shall consist of at most 16 characters

http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4527.pdf § 2.13.5 pagina 28

Nessun motivo è dato dalla norma, ma per me, questo appare come limite del tutto casuale come dovrebbe fare assolutamente nessuna differenza è il delimitatore.

+0

È un motivo dato, o possiamo semplicemente supporre che la lunghezza sia stata arbitrariamente decisa? (Non intendo arbitrario in senso negativo, ma in senso letterale.) –

+0

Anche a me piacerebbe molto sapere questo. –

+0

In una delle appendici specificano limiti inferiori su elementi come il numero di argomenti del modello e la profondità di annidamento della classe. Questo * upper * bound che appare nel testo standard generale è molto insolito. Sembra che la sequenza massima di 16 caratteri dovrebbe essere il minimo e può essere un ID. – emsr

Problemi correlati