内联调用不太可能失败,代码大小会增加 [-Winline] 但不使用内联
inlining failed in call to unlikely and code size would grow [-Winline] but not using inline
对 C++ 很陌生。
这是我的用户定义的 fmiNode class: (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:?
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;
}
干杯,
里斯
如果您在 class 定义中定义一个函数(构造函数,在您的例子中),结果与使用 inline
关键字在 class 之外定义它的结果相同,根据 C++ 标准:
7.1.2.3 A function defined within a class definition is an inline function
所以编译器得到了 inline
提示,但是由于警告消息中的原因,认为将构造函数内联到 main
中是一个坏主意,所以它给了你警告。
更新:是的,您应该在 EDIT 中定义 class 以避免此警告。更好的是,将定义放入 .cpp 文件中以避免多个定义错误。
对 C++ 很陌生。
这是我的用户定义的 fmiNode class: (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:?
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;
}
干杯, 里斯
如果您在 class 定义中定义一个函数(构造函数,在您的例子中),结果与使用 inline
关键字在 class 之外定义它的结果相同,根据 C++ 标准:
7.1.2.3 A function defined within a class definition is an inline function
所以编译器得到了 inline
提示,但是由于警告消息中的原因,认为将构造函数内联到 main
中是一个坏主意,所以它给了你警告。
更新:是的,您应该在 EDIT 中定义 class 以避免此警告。更好的是,将定义放入 .cpp 文件中以避免多个定义错误。