2014-05-02 14 views
14

Wie ich aus this post entdeckten die Parametertypen für einen benutzerdefinierten wörtlichen Typ erlaubt sind wie folgt:Wie erstelle ich ein benutzerdefiniertes Literal für einen Ganzzahl-Typ mit Vorzeichen?

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 

Nun, die einzige Signed Integer ich in dieser Liste sehen ist char, was zu klein ist. Was passiert, wenn ich so etwas wie dies tun wollte:

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

Dann, wenn ich -1000_i schreibe ich erwarte -2000 zu bekommen. Wie mache ich das?

+0

Hinweis: 'char' kann je nach Implementierung ein signierter Typ sein oder nicht. – user2079303

+2

'char' (und' wchar_t', 'char16_t' und' char32_t' gelten für Literale mit einem einzigen Anführungszeichen. Eine Ziffernfolge ist immer ein ganzzahliges Literal und immer positiv, weil das '-' Zeichen _nicht_ Teil von ist it. –

Antwort

30

Es gibt kein negatives Integer-Literal. -1000 ist die Anwendung des unären - Operators auf das Literal 1000.

Dann, wenn ich schreibe -1000_i erwarte ich -2000 zu erhalten. Wie mache ich das?

definieren 1000_i in einer solchen Art und Weise, dass einstellige - Anwendung -2000 gibt. Sie könnten zum Beispiel 1000_i einen Strukturtyp mit einer benutzerdefinierten überladenen operator- machen.

+1

+1: Spot und schlugen mich dazu. –

Verwandte Themen