c++ - 这是内联函数的有效用法吗?

标签 c++ function macros inline

假设我有这段代码(不要介意 SecondsToMinutes 和 MinutesToHours 是彼此的拷贝这一事实)

inline float SecondsToMinutes(float seconds)
{
    return seconds / 60.0;
}
inline float MinutesToHours(float minutes)
{
    return minutes / 60.0;
}
inline float HoursToDays(float minutes)
{
    return minutes / 24.0;
}
inline float SeconndsToHours(float seconds)
{
    return MinutesToHours(SecondsToMinutes(seconds));
}
inline float MinutesToDays(float minutes)
{
    return HoursToDays(MinutesToHours(minutes));
}
inline float SeconndsDays(float seconds)
{
    return MinutesToDays(SecondsToMinutes(seconds));
}

这是内联的有效用法吗?是否有意义?这是好习惯吗?毕竟,如果我没记错的话,内联意味着函数调用被函数体代替,所以

return MinutesToDays(SecondsToMinutes(seconds))

应该等同于

return seconds / 60.0 / 60.0 / 24.0

对吧?

还是只使用宏更好?

#define EXCHANGE_SEC_MIN(x) (x / 60.0)
#define EXCHANGE_MIN_H(x) (x / 60.0)
#define EXCHANGE_H_D(x) (x / 24.0)
#define EXCHANGE_SEC_H(x) (EXCHANGE_MIN_H(EXCHANGE_SEC_MIN(x)))
#define EXCHANGE_MIN_D(x) (EXCHANGE_H_D(EXCHANGE_MIN_H(x)))
#define EXCHANGE_SEC_D(x) (EXCHANGE_MIN_D(EXCHANGE_SEC_MIN(x)))

哪个是更好的做法?或者两者都不是?我希望其他人对此有所了解。

最佳答案

Is this valid usage of inline? Does it make sense? Is this good practice? After all, if I recall correctly, inline means that function calls are replaced by function bodies, so

当然可以。你让它更清晰,这总是好的。

return seconds / 60.0 / 60.0 / 24.0

是的,结果就是这样。或者应该。 inline 只是一个提示,编译可能会做出其他决定。但是对于这样一个衬里,编译器会将其内联。

宏?为什么?如果可以用函数完成,为什么要使用宏?

关于c++ - 这是内联函数的有效用法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40280087/

相关文章:

c++ - 在 C++ 代码中奇怪地使用 void

c++ - 有人可以在我的代码中找到与 C++ 中的 IF 语句相关的问题吗?

c++ - 用于检查 C/C++ 代码约定的自动工具

c++ - isupper() 是宏还是函数?

C 预处理器将标识符视为类对象而不是类函数

c++ - 货币格式化 C++

Jquery 动画 fontSize 在单击时恢复到原始大小

c++ - 通过文本文件将字符串和 Int 发送到函数

import - 是否可以在 Julia 中直接导入宏?

r - 如何在加载包时完全防止 "The following object is masked from ‘package:...’ :. .."问题/警告?