代码之家  ›  专栏  ›  技术社区  ›  Rhys Goodwin

内联调用失败,代码大小将增长[-Winline],但不使用内联

  •  7
  • Rhys Goodwin  · 技术社区  · 9 年前

    这对C++来说是非常新鲜的。

    以下是用户定义的fmiNode类:(fmi.h)

    class fmiNode
    {
    public:
        fmiNode(std::string NodeName,int Address)
        {
            this->name = NodeName;
            this->address = Address;
        }
    
        std::string GetName()
        {
        return this->name;
        }
    
        int GetAddress()
        {
        return this->address;
        }
    
    private:
        std::string name;
        int address;
    };
    

    这是我的主要方法(fmi.c)

    int main (int argc, char *argv[])
    {
      fmiNode node1("NodeA",4);
      fmiNode node2("NodeB",6);
      fmiNode node3("NodeC",8);
      fmiNode node4("NodeD",10);
    
      while(1)
      {
          MainLoop();
      }
    }
    

    如果我只实例化一个fmiNode对象,一切都很好。但以下3项会引发警告:

     warning: inlining failed in call to ‘fmiNode::fmiNode(std::string, int)’: call is unlikely and code size would grow [-Winline]
    

    我在这里做错了什么。

    编辑:

    所以我应该这样定义我的类:?

    class fmiNode
    {
    public:
        fmiNode(std::string NodeName,int Address);
    
        std::string GetName()
        {
        return this->name;
        }
    
        int GetAddress()
        {
        return this->address;
        }
    
    private:
        std::string name;
        int address;
    };
    
    fmiNode::fmiNode(std::string NodeName,int Address)
    {
        this->name = NodeName;
        this->address = Address;
    }
    

    干杯 里斯

    1 回复  |  直到 9 年前
        1
  •  7
  •   SingerOfTheFall    9 年前

    如果在类定义内定义函数(在您的情况下是构造函数),则结果与在类外使用 inline 关键字,根据c++标准:

    7.1.2.3类定义中定义的函数是内联函数

    所以编译器得到 内联 提示,但认为将构造函数内联到 main 由于警告消息中的原因,这是一个坏主意,因此它会向您发出警告。

    使现代化 :是的,您应该将类定义为 编辑 以避免此警告。更好的是,将定义放入.cpp文件中,以避免多个定义错误。