2017-06-30 2 views
2

Ich sah nur eine neue C++ Syntax wie:Wie lautet der Name dieser neuen C++ - Syntax?

x = "abc"s; 

Von Kontext vermutete ich, dass dies bedeutet, x eine Zeichenfolge „abc“ zugewiesen wurde, würde Ich mag den Namen dieser neuen Syntax kennen, und gibt es eine ähnliche Syntax in C++ 1z?

+3

[Stringliteral] (http://en.cppreference.com/w/cpp/string/basic_string/operator%22%22s) (seit C++ 14). – songyuanyao

+2

meinst du den Betreiber "" s ??? –

+1

Vielen Dank für die Antwort, ich denke, diese Antwort ist genau das, was ich suche, bitte stellen Sie dies als eine Antwort für mich zu genehmigen :). – dguan

Antwort

11

Ja, sie gibt es seit C++ 11. Sie heißen user-defined literals. Dieses spezifische Literal wurde in C++14 standardisiert, es ist jedoch leicht, Ihre eigenen zu rollen.

#include <string> 
#include <iostream> 

int main() 
{ 
    using namespace std::string_literals; 

    std::string s1 = "abc\0\0def"; 
    std::string s2 = "abc\0\0def"s; 
    std::cout << "s1: " << s1.size() << " \"" << s1 << "\"\n"; 
    std::cout << "s2: " << s2.size() << " \"" << s2 << "\"\n"; 
} 

Zum Beispiel Ihre eigene std :: Stringliteral zu machen, könnten Sie tun (beachten Sie, alle benutzerdefinierten Literale müssen mit einem Unterstrich beginnen):

std::string operator"" _s(const char* s, unsigned long n) 
{ 
    return std::string(s, n); 
} 

das Beispiel verwenden I gab, einfach tun:

#include <iostream> 
#include <string> 

std::string operator"" _s(const char* s, unsigned long n) 
{ 
    return std::string(s, n); 
} 


int main(void) 
{ 
    auto s = "My message"_s; 
    std::cout << s << std::endl; 
    return 0; 
} 
+2

Vielleicht ersetzen "hinzugefügt" durch "standardisiert"?: Es war möglich, dies selbst in C++ 11 zu tun. – Bathsheba

+0

danke, gibt es noch andere benutzerdefinierte Literale mit ähnlicher Syntax? – dguan

+1

Danke für die Bearbeitung. Habe eine Verbesserung. – Bathsheba

Verwandte Themen