2017-08-31 104 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

相关问题