第16周-异常处理和命名空间-项目3-max带来的冲突

来源:互联网 发布:上海网络买菜 编辑:程序博客网 时间:2024/05/06 06:52
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:刘畅* 完成日期:2015 年 6  月  19 日 * 版 本 号:v1.0 * * 问题描述:分析下面程序出现的编译错误,给出解决的方案* 输入描述:NULL;* 程序输出:输出对应的情况;


 (1)

#include<iostream>using namespace std;template<class T>T max(T a, T b){    return (a>b)?a:b;}int main(){    int x=2,y=6;    double x1=9.123,y1=12.6543;    cout<<"把T实例化为int:"<<max(x,y)<<endl;    cout<<"把T实例化为double:"<<max(x1,y1)<<endl;    return 0;}

(2)修改:main中前加::,明确调用的是当前工作域中定义的max

#include<iostream>using namespace std;template<class T>T max(T a, T b){    return (a>b)?a:b;}int main(){    int x=2,y=6;    double x1=9.123,y1=12.6543;    cout<<"把T实例化为int:"<<::max(x,y)<<endl;    cout<<"把T实例化为double:"<<::max(x1,y1)<<endl;    return 0;}


(3)修改:在main中max前加std::,于是,main中调用的max变成std中定义的函数模板

#include<iostream>using namespace std;template<class T>T max(T a, T b){    return (a>b)?a:b;}int main(){    int x=2,y=6;    double x1=9.123,y1=12.6543;    cout<<"把T实例化为int:"<<std::max(x,y)<<endl;    cout<<"把T实例化为double:"<<std::max(x1,y1)<<endl;    return 0;}


(4)修改:去掉using namespace std;,在main中cout等std中的名称前加std::,于是,main中调用的max,是本工作域中定义的函数模板

#include<iostream>template<class T>T max(T a, T b){    return (a>b)?a:b;}int main(){    int x=2,y=6;    double x1=9.123,y1=12.6543;    std::cout<<"把T实例化为int:"<<max(x,y)<<std::endl;    std::cout<<"把T实例化为double:"<<max(x1,y1)<<std::endl;    return 0;}


 

 

 

 

1 0