2016-08-26 2 views
-5

Ich schrieb dieses Stück Code, der funktioniert [1], aber geben Sie mir die Warnmeldung [2], in der Tat möchte ich die Adresse eines int in einem Doppel. Ich frage mich nur, ob es sicher ist, das mit ref zu tun (ich werde kein komisches Verhalten erleben).Kann ich ein Doppel machen & mit einem int

[2]

test.cc:10:27: Warnung: Verengen Umwandlung von 'myint' aus 'int' to 'double' innerhalb {} [-Wnarrowing] const double & intref { Myint};

[1]

int main(){  
    int myint{10}; 
    cout<<"myint: "<<myint<<endl; 

    const double &intref{myint}; 
    cout<<"intref: "<<intref<<endl; 
} 
+5

Was könnte das möglicherweise tun, das ist nicht komisch? –

+4

'Ich möchte die Adresse eines int in einem double setzen. Eine Referenz ist keine Adresse. Selbst wenn es war, warum denkst du daran? Jeder Versuch, die Adresse zu dereferenzieren, würde die Alias-Regeln der Sprache brechen und somit ein undefiniertes Verhalten auslösen. Und wofür? Was versuchst du zu machen? Dies ist mit ziemlicher Sicherheit eine X/Y-Frage, d. H. Anstatt zu fragen: "Wie mache ich spezifische Sache X?", Sagen Sie uns, was die allgemeine Sache Y ist, die Sie dazu gebracht hat, diese Frage zu stellen. Es muss unbedingt eine bessere Lösung geben, was auch immer Sie hier versuchen. –

+0

... oder wenn Sie gemeint haben, dass Sie die numerische Darstellung einer 'int *' - Adresse buchstäblich umwandeln und in einer 'double' -Variablen speichern möchten, dann ist das aus mehreren Gründen keine gültige Konvertierung. Es gibt einfach keine Interpretation dieser Frage, die irgendeinen Sinn ergibt oder den Menschen eine nützliche Grundlage für die Antwort gibt. Sie müssen es wirklich umschreiben, um Ihre Motivation richtig zu erklären. –

Antwort

0

A double& hat zu einem Doppel Bezug zu nehmen, und myint ist kein Doppel. Sie bauen gerade ein temporäres Double und bauen ein const double& zum temporären.

+0

Mein Problem ist, dass ich einen Vektor der Referenz von Int und Double machen möchte, aber Vektor kann nur 1 Typ richtig enthalten? Also versuche ich, das Int doppelt zu machen ... und ich frage mich, ob es sicher ist. – cabe

+2

@cabe Containers können keine Referenzen enthalten, wie Sie herausgefunden hätten, wenn Sie versucht hätten, einen zu konstruieren. Wenn Sie Werte von mehreren möglichen Typen speichern möchten, Google für "variant", "any" usw., die in C++ 17 ankommen und bis dahin aus der Boost-Bibliothek stammen. –

Verwandte Themen