Adresse der temporären verwenden - Umgehung benötigt

8

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.

    
elcuco 01.04.2012, 08:34
quelle

3 Antworten

9
%Vor%

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.

    
Mat 01.04.2012, 08:39
quelle
4

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%     
Nikola Smiljanić 01.04.2012 08:47
quelle
3
%Vor%

Meiner Meinung nach sollte es genauso legal sein, ein const T* als const T& zu verwenden, aber diese triviale Funktion wird die Konvertierung leicht durchführen.

    
Puppy 01.04.2012 08:46
quelle

Tags und Links