2017-08-31 30 views
-2

在我的函數sumofrange中,我決定輸出一個未聲明的變量來學習C++中不同的編譯器錯誤。令我驚訝的是,time似乎輸出1,即使它沒有在任何地方聲明。一個未申報的變量如何輸出一個值

#include <iostream> 
#include <cmath> 

using namespace std; 

int sumOfrange(int lower, int upper){ 
    cout<<time<<endl; 
    return ((((pow(upper,2)) + upper) - ((pow(lower,2)) + lower))/2); 
} 

int main(){ 
    cout<<sumOfrange(7,100)<<endl; 
    return 0; 
} 
+4

這就是爲什麼命名空間很重要,而'使用命名空間標準;'有時是危險的。 – ForceBru

+0

你應該閱讀[this](https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) – NathanOliver

+1

順便說一句,沒有這樣的事情作爲「未申報的變量」。如果它是未聲明的,你不能使用它 – user463035818

回答

4

您輸出在<ctime>頭部聲明一個std::time函數的地址。您也正在使用using namespace std;聲明。爲什麼應該避免在this SO post中解釋。根據編譯器和平臺的不同,如果在Windows上使用VC++編譯器,則可能會得到類似於(0x)00DC52E0的十六進制輸出,如果在Linux上使用g ++編譯器,則可能會得到十六進制輸出1

+0

使用'using namespace std;'的另一個例子是微妙的陷阱。 –

+3

不確定一個函數是否有值。無論如何,它的函數 – user463035818

+3

的地址我相信它被投射到一個'bool'並返回爲1.'cout <<(void *)time << endl;'輸出一個地址。 – Persixty

相關問題