2016-06-29 9 views
-6
void main() 
{ 
    int num, a=15; 
    num = ----a--; 
    cout<<num; 
    cout<<a; 
} 

Ich versuchte es ... Ich Auf dem Papier bekommen sollte, Coz 4 minus gegenseitig aufheben und links, was ist a--Was ist die Ausgabe dieses Codes? Fehle ich hier etwas?

Aber auf PC bekomme ich Fehler Coz die kompilieren - - bevor der a-- den Compiler dazu bringt zu denken, dass in diesem '----' Pre/Post Dekrementoperatoren sind und nach einem Operanden fragt. Was ist die Lösung?

+4

Die Lösung ist, ein solches verschleiertes Stück Code nicht zu verwenden und klar auszudrücken, was Sie tun möchten. Programmierung ist hart genug, warum es schwieriger machen, als es sein muss? – NathanOliver

+0

@NathanOliver nein nein das ist eigentlich genau das, was man in einem Fragepapier gefragt hat –

+2

Warum sollte '----' sich gegenseitig auslöschen? "-" dekrementiert, so sehe ich nicht, warum zwei von ihnen dekrementieren und erhöhen würden. Abgesehen davon, wenn Sie einen Compilerfehler erhalten, sollten Sie den genauen Fehler vollständig posten, nicht versuchen, ihn zu beschreiben. – chris

Antwort

3

Ein richtiges Programm zum Beispiel auf folgende Weise aussehen kann

#include <iostream> 

int main() 
{ 
    int num, a = 15; 
    num = (----a)--; 

    std::cout << num << std::endl; 
    std::cout << a << std::endl; 

    return 0; 
} 

Sein Ausgang ist

13 
12 

Der Post-Dekrement-Operator hat eine höhere Priorität als die vorge Dekrementoperator und sein Ergebnis ist rvalue kann nicht geändert werden.

Dieser Ausdruck

----a-- 

entspricht

----(a--) 

und kompilieren nicht.

Sie müssen also Klammern verwenden, um das Programm zu kompilieren.

Berücksichtigen Sie dabei, dass ein entsprechendes Programm in C geschrieben, wie zum Beispiel

#include <stdio.h> 

int main(void) 
{ 
    int num, a = 15; 
    num = (----a)--; 

    printf("%d\n", num); 
    printf("%d\n", a); 

    return 0; 
} 

wird nicht kompiliert, da die Pre-Dekrementoperator in C rvalue auch zurückgibt und Sie können den Bediener rvalue keine Anwendung.

Nur das C++ - Programm ist gültig.

+0

aber die Sache ist die unmodifizierte Version (was ive typisierte) ist genau das, was einmal in einer Prüfung des Vorjahres gefragt wurde. also das aus dem Programm geschrieben werden als "es wird o/p wegen Kompilierungsfehler nicht produzieren"? –

+0

aber die Sache ist die unmodifizierte Version (was ive typed) ist genau das, was einmal in einer Prüfung des letzten Jahres gefragt wurde. also das aus dem Programm geschrieben werden als "es wird o/p wegen Kompilierungsfehler nicht produzieren"? –

+1

@NiranjanDixit Ja, der ursprüngliche Code wird nicht kompiliert. –

Verwandte Themen