为什么这个程序显示编译时警告?

时间:2014-01-14 18:35:15

标签: c++ class inline compiler-warnings turbo-c++

   #include<iostream.h>
   class man
  {
   public:
   void money()
   {
     for(int i=0;i<5;i++)
     cout<<i;
   }

   };

   void main()
   {

      man m;
      m.money();

    }

编译时,警告显示为“包含for的函数未内联展开”。为什么会这样?

2 个答案:

答案 0 :(得分:2)

在默认情况下被视为具有inline函数说明符的类中定义的函数,即使您没有明确指定它也是如此。但是,并非所有函数都可以由编译器内联。编译器会告诉你这个。

考虑到如果使用现代编译器,它将无法编译代码。标识符cout将是未声明的,因为您没有指定其名称空间,主函数应具有返回类型int

另外,我会使用money限定符声明函数const

void money() const;

答案 1 :(得分:0)

TurboC ++是一个非常古老的编译器,与标准化的C ++相比,今天的标准非常缺乏。当您在类的定义中包含成员函数的定义时,该函数是隐式内联的。您收到警告是因为TurboC ++无法内联包含某些语言结构的函数。在这种情况下,它是编译器无法内联的for循环。最近常用的编译器如GCC和MSVC不是这种情况,因为它们能够内联函数。

虽然我通常不建议忽略工具链生成的警告,但我认为在这种情况下完全合理。忽略它并继续前进。