2014-03-01 229 views
5

我有這樣的代碼:爲什麼沒有爲所有變量報告「未使用的變量」警告?

// 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; 
} 

然而gcc編譯器給我unused variable只爲values陣列警告。爲什麼vcities未報告?

+0

? –

+1

這兩個是類實例,而類構造函數/析構函數可能有副作用,例如改變一些全球狀態。 –

+2

後兩個變量*被使用(在它們自己的構造中,其中具有潛在的副作用)。微不足道的POD類型沒有這樣的功能結構。如果您將其類型更改爲POD類型,並且例如動態初始化它們,則會出現相同的使用警告。 'std :: vector * pv = new std :: vector {4,5,6};'會發出相同的警告。 – WhozCraig

回答

2

它不是原始值,所以它的構造函數和/或析構函數可能會有所需的副作用。

古典例如:一個Timer對象其測量它的結構和破壞之間的時間:因爲它們不是一個POD https://stackoverflow.com/a/5302868/1938163

+4

或作用域鎖定對象。 –

相關問題