回 帖 发 新 帖 刷新版面

主题:[讨论]内置函数


(1)#include <iostream>
     using namespace std;
     inline int max(int x,int y); //内置函数声明    《1》
     int main()  
     {int a,b,c;
       cout<<"please enter a,b:";
        cin>>a>>b;
        //inline int max(int x,int y);            《2》 
         c=max(a,b);            //调用max函数
        cout<<"max="<<c<<endl;
        return 0;
       }
      inline int max(int x,int y)      //内置函数
       {   int z;
         z=x>y?x:y;
         return (z);
       }


(2) 
      #include <iostream>
      using namespace std;
      int max(int x,int y);   //函数声明     《1》
      int main()  
     {int a,b,c;
     cout<<"please enter a,b:";
      cin>>a>>b;
     //int max(int x,int y);      //函数声明       《2》
       c=max(a,b);        //调用max函数
       cout<<"max="<<c<<endl;
        return 0;
       }
       int max(int x,int y)
      {int z;
        z=x>y?x:y;
        return (z);
       }




该两个程序 比较,

(1) 采用了内置函数, 则(1)中的内置函数声明只能放在《1》处,这是 为什么呢?

(2)没有用到内置函数,则(2)中的函数声明放在《1》《2》处都可以?

 为什么会有这样的不同呢?

请高手指导,谢谢。

回复列表 (共4个回复)

沙发

在函数内声明为inline的结果将由编译器决定其结果,我在dev c++中的测试结果是在main内声明inline会被当成一次函数调用,自然就不能在定义之前这么写。去掉inline的话结果正确

板凳


“被当成一次函数调用”  不懂事什么意思?

3 楼



作者:雪光风剑
专家分:22120

  会员信息
 发短消息
 所属博客


(1)
#include <iostream>
using namespace std;
template <typename T>
T max(T a,T b,T c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}
int main()

  int i1=185,i2=-76,i3=567,i;
  double d1=56.87,d2=90.23,d3=-3214.78,d;
  long g1=67854,g2=-912456,g3=673456,g;
  i=max(i1,i2,i3);
  d=max(d1,d2,d3);
  g=max(g1,g2,g3);
  cout<<"i_max="<<max(i1, i2,i3)<<endl; 
  cout<<"d_max="<<d<<endl;
  cout<<"g_max="<<g<<endl; //不可写成max(int a,int b,int c)
  return 0;
}


(2)
#include <iostream>
using namespace std;
template <typename T>
int main()
{ T max(T a, T b,T c);  //函数声明
  int i1=185,i2=-76,i3=567,i;
  double d1=56.87,d2=90.23,d3=-3214.78,d;
  long g1=67854,g2=-912456,g3=673456,g;
  i=max(i1,i2,i3);
  d=max(d1,d2,d3);
  g=max(g1,g2,g3);
  cout<<"i_max="<<max(i1, i2,i3)<<endl; 
  cout<<"d_max="<<d<<endl;
  cout<<"g_max="<<g<<endl; //不可写成max(int a,int b,int c)
  return 0;
}
T max(T a,T b,T c)
{if(b>a) a=b;
 if(c>a) a=c;
 return a;
}




问:(1)不可以写成(2)? 即把max()函数放在了 main()函数之前,在main函数里对max进行了声明?

  不行的原因是不是因为max在这里只是个函数模板,而非实质的函数。?

谢谢

4 楼

模板一般不会分开去写声明和定义,因为有前置的模板声明template <typename T>需要作为模板的前提,否则T就是一个未被解析的符号。
第一个问题你可以去看一下dev c++的warning,说的是调用前未定义

我来回复

您尚未登录,请登录后再回复。点此登录或注册