2014-05-02 10 views
14

come ho scoperto da this post i tipi di parametri consentiti per un tipo letterale definito dall'utente sono i seguenti:Come posso creare un valore letterale definito dall'utente per un tipo intero con segno?

const char* 
unsigned long long int 
long double 
char 
wchar_t 
char16_t 
char32_t 
const char*, std::size_t 
const wchar_t*, std::size_t 
const char16_t*, std::size_t 
const char32_t*, std::size_t 

Ebbene, l'unico intero con segno che vedo in tale elenco è char, che è troppo piccolo. Che cosa succede se volevo fare qualcosa di simile:

str operator"" _i(int i) { 
    return i*2; 
} 

Poi quando scrivo -1000_i mi aspetto di ottenere -2000. Come faccio a fare questo?

+0

Sidenote: 'char' può o non può essere un tipo firmato a seconda dell'implementazione. – user2079303

+2

'char' (e' wchar_t', 'char16_t' e' char32_t' si applicano a caratteri letterali a virgolette singole. Una stringa di cifre è sempre un intero letterale ed è sempre positiva, perché il segno '-' è _not_ parte di it. –

risposta

30

Non esiste un letterale intero negativo. -1000 è l'applicazione dell'operatore unario - al valore letterale 1000.

Quindi quando scrivo -1000_i mi aspetto di ottenere -2000. Come faccio a fare questo?

Definire 1000_i in modo tale che l'applicazione unario --2000. Ad esempio, è possibile rendere 1000_i un tipo di struttura con un sovraccarico personalizzato operator-.

+1

+1: trova il punto e picchiami. –

Problemi correlati