繁体   English   中英

是不是写的多层次的内联函数在C ++好主意吗?

[英]Is it good idea to write multi level inline functions in C++?

这样的代码是否被认为是不好的做法? 如果是这样,当func1复制func2的行为并且我需要同时存在这两个函数时,该怎么办?

UPD:对不起,我的插图不好,我将尝试更清楚地解释这个问题。 我想问的是:我正在尝试设计一个优化类,该类大量调用两个方法func1func2func1的实现使用func2 ,我希望尽可能内联这两个方法的调用,所以最好像这样的代码从func1调用func2或独立实现两者。

inline int func2(int x) {
    return x * (x + 2);
}
inline int func1(int x) {
    return x * (x + 1) * func2(x + 2);
}

如果可以避免多次编写相同的代码,则可以编写几个小函数。 有人可能会争辩说,太多的小功能使代码难以阅读,这是一个观点问题。

如果您担心性能,则编译器会在认为有帮助的情况下进行内联,除非您证明存在问题,否则不要担心它。 请参阅有关过早优化的问题

一个函数调用另一个函数没有问题。 如果对它们进行采样,您将看到真实的程序比两个调用更深入。

就内联而言,这也不是问题。 优化编译器通常会内联func2 (假设其定义可见并且启用了优化)。 许多常见的编译器和优化器对内联都很聪明。 他们通常知道何时内联和何时不内联-所有这些都无需您的帮助。

编写小的函数并不是一个坏习惯。 清晰性和意图通常比微优化的重要性更高。 在典型情况下,您的示例没有错。

如果它有助于提高代码的可读性,则可以。 您几乎应该始终以代码的可读性为目标。 不要忘记正确命名您的函数,这样其他人将很容易理解该函数在做什么。 在其他几个星期或几个月内,我也指其他人。 正如他们所说,您只编写一次代码,但是却多次阅读。
至于性能,现代编译器知道何时内联函数,您不必担心。 在真正重要的情况下,您将使用探查器查找主机位并最终对其进行更改。 但是它发生的次数比您想象的要少得多。 您几乎总会找到更好的方法来优化代码。

如果两者都在同一个范围内实现,那么compile甚至可以在没有inline情况下进行代数优化。 不久前,当看到编译器有时用目标函数的简单调用(用于d3d api的kinda参数)替换大型复杂结构时,我感到非常惊讶。 因此,如果您担心性能,则不必担心……至少您的应用基准测试确实很糟糕。

另一方面,它是关于关系的:如果func1在逻辑上与func2没有真正的关系,则仅是代码\\算是相同的,比将func2复制到func1更好。 为什么? 因为func2可能会更改,但是您忘记了func1并破坏了它,因为它们与内部域逻辑无关。


UPD之后的UPD

如果所有关于速度的内容都只是数学,那么可以在func1中编写完全优化的表达式,而不必依赖编译器。 但是,如果您真的知道性能居首位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM