Ich stehe vor einer GCC-Warnung, die ich beheben möchte. Grundsätzlich gebe ich an eine Methode einen Zeiger auf eine lokale Variable weiter, was in meinem Fall vollkommen in Ordnung ist. Ich verstehe, warum der Compiler mir sagt, dass dies ein potenzielles Problem ist, aber in meinem Fall ist das OK.
Wie kann ich auf einem lokalen Speicherplatz umgehen? Die Übergabe von -fpermissive
beim Kompilieren wird dazu führen, dass ich zukünftige Probleme nicht finden kann. Ich möchte dieses spezielle Problem beheben oder umgehen.
Code ist hier verfügbar:
%Vor%Und Zusammenstellung gibt mir:
%Vor%BEARBEITEN:
Die Verwendung von const
(wie bei der Erstellung von foo
einen const-Zeiger und die Markierung von value()
als const) führt zu demselben Fehler.
Das wird die "die Adresse eines temporären" Problems loswerden, was Sie haben. Du übergibst nicht die Adresse einer lokalen Variable (was das obige tut, und ist in diesem Fall in der Tat in Ordnung), du greifst die Adresse eines temporären.
Offensichtlich, wenn foo
versucht, diesen Zeiger auf die eine oder andere Weise zu behalten, werden Sie Probleme in der Zeile haben.
GCC ist in diesem Fall falsch. Ihre Ganzzahl ist ein R-Wert, und die Adresse eines R-Werts ist ungültig.
§5.3.1 Unäre Operatoren, Abschnitt 3
Das Ergebnis der unären & amp; Der Operator ist ein Zeiger auf seinen Operanden. Das Der Operand muss ein Wert oder eine qualifizierte ID sein.
Clang gibt in diesem Fall einen Fehler:
%Vor%Tags und Links c++ gcc pass-by-reference