2014-03-01 5 views
5

Ich habe diesen Code:Warum wird die Warnung "unbenutzte Variable" nicht für alle Variablen gemeldet?

// initializer lists 
#include <iostream> 
#include <vector> 

int main() 
{ 
    int values[] { 1, 2, 3 }; 

    std::vector<int> v { 4, 5, 6 }; 

    std::vector<std::string> cities { 
     "London", "New York", "Paris", "Tokio" 
    }; 

    return 0; 
} 

jedoch die gcc Compiler mir unused variable gibt values Array nur zur Warnung. Warum wird v und cities nicht gemeldet?

+0

, weil sie kein POD sind? –

+1

Diese beiden sind Klasseninstanzen und Klassenkonstruktoren/Destruktoren können Nebenwirkungen haben, z.B. einen globalen Staat verändern. –

+2

Die letzten beiden Variablen * werden * verwendet (in ihrer eigenen Konstruktion mit möglichen Nebenwirkungen darin). Die trivialen POD-Typen sind nicht so funktional aufgebaut. Die identische Verwendungswarnung tritt für Ihre anderen auf, wenn Sie ihre Typen in POD-Typen ändern und diese beispielsweise dynamisch initialisieren. 'std :: vector * pv = neuer std :: vector {4,5,6};' wird die identische Warnung ausgeben. – WhozCraig

Antwort

2

Es ist kein primitiver Wert, daher könnte der Konstruktor und/oder Destruktor die gewünschten Nebenwirkungen haben.

Klassisches Beispiel: ein Timer-Objekt, die die Zeit zwischen seiner Konstruktion und Destruktion misst: https://stackoverflow.com/a/5302868/1938163

+4

Oder ein Scoped-Lock-Objekt. –