Ho esaminato alcune delle nuove funzionalità di C++ 11 e sono molto impressionato da alcune di esse, in particolare dai letterali definiti dall'utente.Come ottenere la variabile più piccola con letterali definiti dall'utente C++ 11
Questi consentono di definire i valori letterali del modulo 999_something
dove something
controlla ciò che viene fatto allo 999
per generare il valore letterale. Quindi, non sarà più necessario utilizzare:
#define MEG * 1024 * 1024
int ten_meg = 10 M;
ciò pensavo sarebbe bello implementare sottolineatura in gran numero, come 1_000_000_blah
, che sarebbe partita la leggibilità di Perl, se l'idea che Perl è in qualche modo leggibile sembra abbastanza divertente per me :-)
Sarebbe utile anche per valori binari come 1101_1110_b
e 0011_0011_1100_1111_b
.
Ovviamente a causa dei caratteri _
, questi dovranno essere di tipo raw, elaborare una stringa C e sto bene.
Ciò che I non può capire come fornire un tipo diverso in base alla dimensione dell'operando. Ad esempio:
1101_1110_b
dovrebbe dare una char
(supponendo char
è 8 bit ovviamente) mentre:
0011_0011_1100_1111_b
sarebbe fornire un tipo a 16 bit.
È possibile ottenere la lunghezza dell'operando dall'interno della funzione di operatore letterale operator""
(contando i caratteri numerici) ma il tipo restituito sembra essere fissato alla funzione, quindi non posso restituire un tipo diverso in base a questo.
questo può essere fatto con un solo suffisso _b
nel quadro tipi definiti dall'utente, o devo ricorrere alla suddivisione dei tipi a parte manualmente (_b8
, _b16
e così via) e di fornire funzioni per lo più duplicati?
Non sono sicuro se questo funziona, ma si potrebbe provare a sovraccaricare diversi modelli di operatore letterale per vari conteggi di bit. – celtschk
Apparentemente funziona: http://akrzemi1.wordpress.com/2012/10/29/user-defined-literals-part-iii/ - Penso che il modello fornito dovrebbe essere abbastanza facile da estendere per supportare più tipi. – celtschk
Ripensandoci, ciò che probabilmente * not * funziona è l'uso di caratteri di sottolineatura come parte del numero: IIUC '1101_1110_b' non * chiamerà * operatore" "_ b' con l'argomento (modello)' 1101_1110', ma 'operatore ' "_1110_b' con argomento (modello)' 1101'. – celtschk