2016-11-03 1 views
-4

Wie der Titel sagt, gibt es eine Möglichkeit, das zu tun? Ich habe versucht, #define und #typedef zu verwenden, aber beide müssen das Wort "string" im Programm erscheinen.Gibt es eine Möglichkeit, Zeichenfolge in C++ zu verwenden, ohne dass das Wort "Zeichenfolge" im Programm angezeigt wird?

+2

hmmm vielleicht 'char *' ? – Amadeus

+0

Sie können Cstrings verwenden. –

+5

Während * ist es möglich * Fragen können Spaß machen Ich sehe kein praktisches Programmierproblem das könnte lösen. – NathanOliver

Antwort

0

Natürlich können Sie:

#define S str##ing 
#define S_INCLUDE <S> 

#include <iostream> 
#include S_INCLUDE 

int main() 
{ 
    std::S str = "Hello world!"; 
    std::cout << str << std::endl; 
} 
+0

'std :: runtime_error (" "). What()' gibt ein 'const char *' zurück, also ist es kein 'std: stirng'. – NathanOliver

+0

Beachten Sie, dass die '' nicht in '' sein muss ... – Jarod42

4

können Sie Makro verwenden:

#define CO(first, second) second##first 

int main() 
{ 
    CO(ing, str) foobar; 
} 

, die diesen Fehler erzeugt:

error: ‘string’ was not declared in this scope 
    CO(ing, str) foobar; 

dies zeigt, dass wörtliche string gebaut wurde, es zu benutzen als eine Art liegt auf der Hand (durch using namespace std oder Ändern str zu std::str).

wenn Sie C++ 14 können Sie Literale verwenden:

using namespace std::literals; 
auto str = ""s; 
decltype(str) anotherstr; 

beide Lösungen erfordern Kopf <string> aber das kann, indem ein anderes System-Header vermieden werden, dass direkt oder indirekt enthält es.

aber ich sehe keinen praktischen Zweck davon.

+0

Sie müssen jedoch include für 'std :: Literals' beheben. – Jarod42

+0

Die erste Antwort erzeugt einen Fehler, ich sehe nicht, wie das relevant ist. In der zweiten Antwort brauchen Sie '#include ' sowieso. – imreal

+0

in gcc können Sie einfach # # include ', wenn Nicht-Portabilität erlaubt ist. – jaggedSpire

0

Sie können dies tun:

#include FOOBAR_I 

int main() { 
    std::FOOBAR foobar = ""; 
    (void)foobar; 
} 

und kompilieren Sie es mit den folgenden Befehlszeilenparameter:

-DFOOBAR="string" -DFOOBAR_I="<string>" 
Verwandte Themen