(257)
(2)
(255)
分类: delphi
2012-07-10 13:33:29
命名空间的定义格式为:(取自c 标准文档)
named-namespace-definition:
namespace identifier { namespace-body }
unnamed-namespace-definition:
namespace { namespace-body }
namespace-body:
declaration-seqopt
--------------------------------------------------
有名的命名空间:
namespace 命名空间名 {
声明序列可选
}
无名的命名空间:
namespace {
声明序列可选
}
最初代码如下
#include using namespace std; template t max (t a,t b) { return ((a>b)?a:b); } void main() { double x,y; cin>>x>>y; cout<<"max number is "<<(max(x,y))< cin>>x; } |
我将这段代码放到vc 6.0下竟然通过了,程序运行也正常。这让我百思不得其解。后来终于弄明白了!
其实在std命名空间下还有一个max函数,而且实现的功能也是一样的……我昏。利用转到定义功能可以看到微软是怎么写max函数的。这里为了不被鄙视就不贴微软的代码了。
明白了为什么出现这个错误我们就改写代码如下:
#include using std::cin; using std::cout; using std::endl; template t max (t a,t b) { return ((a>b)?a:b); } int main() { double x,y; cin>>x>>y; cout<<"max number is "<<(max(x,y))< cin>>x; } |
这是我比较推荐的做法,因为c primer, effective c 上都是用这种方式的,但是谭浩强的书上都是一句using namespace std;就搞定,我觉得蛮简洁的就一直用了,没想到带来那么多的问题,以前在友元函数上还碰到莫名的错误呢。
其实还有两个简单的凯发app官方网站的解决方案,那就是把自己定义的函数改成其他的名字,或者直接用微软提供的函数。相信微软提供的效率绝对不会比我们写的低~好了,就写到这了。希望大家养成良好的编程习惯,^-^