2016-07-09 6 views
-3

Wie soll ich dies in C++:Strings und Wert

void out(string x){cout<<x;} 

int main(){ 
    int y; 
    out("How old are you ?"); 
    cin>>y; 
    out("you are \(y) years old !"); 
    return 0; 
} 

Genau wie wir würden in Swift?

+3

Wenn Ihre Frage ist "können wir das tun?" dann probier es aus und finde es heraus. Wenn Ihre Frage lautet: "Wie soll ich das machen?" dann solltest du deine Frage bearbeiten. –

+0

Wäre so etwas wie "out" ("du bist% Jahre alt!", Y) 'nah genug? Weil du das kannst. –

+0

@LukePark Ich dachte, es wäre klar, dass die Antwort auf meine Frage lauten würde: "Ja, wir können es so machen: {sache}", da ich "so" in die Frage lege, "wie" ein vergleichendes Wort ist Satz. Stimmen Sie zu, dass es im Moment verwirrend sein könnte, es zu bearbeiten. –

Antwort

1

String-Konstanten sind Kompilierzeit Konstanten. Sie sind tatsächlich Arrays von char der geeigneten Länge (einschließlich des Terminators). Da sie compile.time Konstanten sind, und da C++ introspection nicht hat, ist die Antwort auf Ihre Frage nein.

Was ist möglich ist etwas wie die printf formatiert Zeichenfolgen und Argumente an die Daten übergeben. Es gibt jedoch einige Nachteile, vor allem, dass Sie die Typ-Sicherheit verlieren und dass Funktionen mit variablen Argumenten dazu führen, dass einige Werte implizit in andere Typen konvertiert werden (z. B. float zu double).

Sie könnten auch parameter packs verwenden und dann können Sie eine Lösung ähnlich wie printf aber mit eingebauter Typ-Sicherheit erstellen. Wenn Sie dem Verweis-Link folgen, können Sie ein Beispiel am Ende dieser Seite sehen.

+0

Es ist nicht notwendig, die Typensicherheit zu verlieren, wenn Sie variadic-Vorlagen anstelle von c-style variadic-Funktionen verwenden. –

+0

@BenjaminLindley Sie haben Recht, ich füge das als eine Option hinzu. –